好的,我有以下代码:
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