当前位置:  开发笔记 > 编程语言 > 正文

Python 2.6 multiprocessing.Queue与线程兼容?

如何解决《Python2.6multiprocessing.Queue与线程兼容?》经验,为你挑选了0个好方法。

我正在使用Python 2.6中的新多处理模块进行实验.我正在创建几个进程,每个进程都有自己的multiprocessor.JoinableQueue实例.每个进程产生一个或多个工作线程(threading.Thread的子类),它们共享JoinableQueue实例(通过每个Thread的__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

我的队列get()和task_done()调用是在彼此之后,因此它们应该是相等的.有趣的是,这似乎只有在get()和task_done()之间完成的工作非常快时才会发生.插入一个小time.sleep(0.01)似乎可以缓解这个问题.

有什么想法发生了什么?我可以使用带有线程的多处理器队列而不是更传统的(Queue.Queue)吗?

谢谢!

布赖恩

推荐阅读
地之南_816
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有