【发布时间】:2013-06-26 13:33:33
【问题描述】:
我有几个工作进程,它们应该在完成后减少一个共享整数。
为了确保线程安全,我尝试了一个锁,但不知何故它不起作用,在程序结束时打印出 worker 仍然会输出 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()
【问题讨论】:
-
请提供比“不知何故无法正常工作”更详细的描述。请注意,您的代码示例不是独立的,因此我们无法运行它并亲自查看问题所在。
-
workers 最后仍然是 4 ;) 在调用 worker 停止后它总是打印为 3
标签: python multithreading thread-safety locks