为什么SimpleQueue的put方法会冻结?

时间:2014-01-22 00:57:50

标签: python multiprocessing

我正在使用SimpleQueue中的multiprocessing.queues类。我的程序工作正常,直到我有异常终止。现在每当我运行它时,它会在执行任何put调用之前在get调用时冻结。我的猜测是SimpleQueue使用的文件或类似的东西作为基础通信方法,它已被破坏。

有关如何让SimpleQueue重新开始工作的任何想法?最好不要重新启动计算机,它是一台共享机器,有多个人同时处理它。

2 个答案:

答案 0 :(得分:1)

  

put(obj [,block [,timeout]])
  把obj放入队列。如果是可选的   参数块为True(默认值),超时为None(   默认情况下,必要时阻止,直到有空闲插槽可用。

你正在检查queue.full()吗?

答案 1 :(得分:1)

对我来说,SimpleQueue.put()似乎在我拨打很多电话时冻结,这可能是问题吗? (OS X,Anaconda,2.7.10)

In [1]: from multiprocessing.queues import SimpleQueue
   ...: from time import time
   ...: 
   ...: def put_jobs(n):
   ...:     q = SimpleQueue()
   ...:     t0 = time()
   ...:     for i in xrange(n):
   ...:         q.put((i, (42, 0)))
   ...:     print '%.3f' % (time() - t0)
   ...: 

In [6]: put_jobs(1000)
0.004

In [7]: put_jobs(1000)
0.004

In [8]: put_jobs(2000)
0.007

In [9]: put_jobs(3000)
0.010

In [10]: put_jobs(4000)

(不会回来几分钟)