У меня есть несколько рабочих процессов, которые должны уменьшить общее целое число, когда они закончены.Python Threadsafe Integer Уменьшение с помощью блокировок
Для обеспечения Threadsafety я попробовал замок, но почему-то не работает, распечатав рабочих в конце программы будет по-прежнему выход 4
workers = 4
lock = threading.Lock()
def workerStopped(id,lock):
lock.acquire()
global workers
print "Decrease workers (" + str(workers) + ")for #" + str(id)
workers = workers - 1
print "Now " + str(workers) + " Workers"
lock.release()
class Worker(Process):
def __init__(self, queue,ident,lock):
super(Worker, self).__init__()
self.queue= queue
self.idstr= str(ident)
self.lock = lock
print "Ident" + self.idstr
......
workerStopped(self.idstr,self.lock)
....
for i in range(4):
Worker(request_queue,i,lock).start()
Просьба дать более подробное описание, чем «как-то не работает». Обратите внимание, что ваш образец кода не является автономным, поэтому мы не можем его запустить и сами убедиться, в чем проблема. – user4815162342
См. [Разница между потоком и процессом] (http://stackoverflow.com/questions/200469/what-is-the-difference-between-a-process-and-a-thread), а также [общий счетчик с python multiprocessing] (http://eli.thegreenplace.net/2012/01/04/shared-counter-with-pythons-multiprocessing/) – mtadd
работники в конце еще 4;) также он всегда печатается как 3 после вызова рабочий остановился – Dukeatcoding