multiprocessing.pool中的代码冻结,但通过循环或joblib.Parallel正常工作

时间:2014-04-05 13:58:39

标签: python python-2.7 numpy multiprocessing scikit-learn

好的,我有以下代码:

pool    = Pool(worker_amount)
results = pool.imap(task_handler, tasks) 
for result in results:
    do_something(result)

pool.close()
pool.join()
...
它永远不会完成。 如果我改变它以避免游泳池,就像那样:

results = []
for task in tasks:
   results.append(task_handler(task))  
for result in results:
   do_something(result)        
...

它在片刻工作。

task_handler看起来与此相似:

X = task.X
Y = task.Y
...
fn = LogisticRegression()  #from scikit-learn package
fn.fit(X,Y)
...

fit方法是我能够在调试器中实现的最后一点。

还有一些重要的注意事项:我在Virtualenv上运行Ubuntu 12.04 LTS / 64 Bit,Python 2.7.6。 IDE - PyCharm,但是如果从终端运行代码也会失败。而且,顺便说一句,我尝试使用不同的工作量从1到4运行此代码 - 没有帮助。

请帮助我理解那里的问题。

UPD1:如果使用joblib.Parallel而它也可以正常工作,但它的工作更像map,是否可以像{imap一样使用它{1}}


有一个要点可以重现这个问题:https://gist.github.com/anonymous/9994217

0 个答案:

没有答案