我正在试验 Python 2.6 中的新多处理模块。我正在创建几个进程,每个进程都有自己的 multiprocessor.JoinableQueue 实例。每个进程产生一个或多个工作线程(threading.Thread 的子类),它们共享 JoinableQueue 实例(通过每个线程的__init__
方法传入)。它似乎通常可以工作,但偶尔会出现无法预料的失败并出现以下错误:
File "C:\Documents and Settings\Brian\Desktop\testscript.py", line 49, in run
self.queue.task_done()
File "C:\Python26\lib\multiprocessing\queues.py", line 293, in task_done
raise ValueError('task_done() called too many times')
ValueError: task_done() called too many times
我的 Queue get() 和 task_done() 调用紧随其后,因此它们应该相等。有趣的是,这似乎只有在 get() 和 task_done() 之间完成的工作非常快时才会发生。插入一个小的time.sleep(0.01)
似乎可以缓解这个问题。
有什么想法吗?我可以使用带线程的多处理器队列而不是更传统的(Queue.Queue)吗?
谢谢!
-布赖恩