yarkov
@yarkov
Помог ответ? Отметь решением.

Я когда-нибудь пойму потоки в Python?

Имеем такой тестовый код:
import threading
import random

lock = threading.BoundedSemaphore(value=5)

def write(*args, **kwargs):
    global lock
    lock.acquire()
    print "Thread name: %s. Result %-6f" % (args)
    lock.release()

class App(threading.Thread):
    
    def __init__(self, *args, **kwargs):
        threading.Thread.__init__(self, *args, **kwargs)
    
    def run(self):
        for i in xrange(5000):
            r = random.random()
            i = i*i-789*96/2*r
        write(self.name, i)
 
for i in xrange(5):
    app = App(name="THREADING_%d" % (i))
    app.start()

Ну вот все хорошо, но ощущение, что замки не срабатывают. На скрине видно, что строки в консоль попадают неровно. Так должно быть?
b2b3ce989aa14ee7b3f70f3f5bcb762e.png
  • Вопрос задан
  • 1001 просмотр
Решения вопроса 1
yarkov
@yarkov Автор вопроса
Помог ответ? Отметь решением.
А вот так вроде то что нужно:
import threading
import random

lock = threading.RLock() # <<< one

def write(*args, **kwargs):
    global lock
    with lock: # <<< two
        print "Thread name: %s. Result %-6f" % (args)

class App(threading.Thread):
    
    def __init__(self, *args, **kwargs):
        threading.Thread.__init__(self, *args, **kwargs)
        self.setDaemon(False)
    
    def run(self):
        for i in xrange(5000):
            r = random.random()
            i = i*i-789*96/2*r
        write(self.name, i)
        


for i in xrange(5):
    app = App(name="THREADING_%d" % (i))
    app.start()
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
да, это нормально
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы