1
以下脚本在使用Python 2.6.7运行时会挂起。它按预期在Python 2.7中打印[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
。它可能是Python 2.6中的一个错误吗?有没有解决方法?multiprocessing.Pool.imap_unordered在Python 2.6中挂起?
def p1(x):
return x + 1
class Tasks(object):
@property
def mapper(self):
from multiprocessing import Pool
pool = Pool(processes=2)
return pool.imap_unordered
def run(self):
xs = range(10)
return self.mapper(p1, xs)
ts = Tasks()
print(list(ts.run()))
在我的计划,我可以通过重写Tasks.run
要解决的窍门:
def run(self):
xs = range(10)
mapper = mapper
return mapper(p1, xs)
但我不能用上面的脚本重现此。
另请注意,在这里使用@property
是必不可少的。在分配像__init__
以下mapper
解决了这个问题:
def __init__(self):
from multiprocessing import Pool
pool = Pool(processes=2)
self.mapper = pool.imap_unordered
嗨,我还没有试过这种解决方案,但你可以试一试:http://www.rueckstiess.net/research/snippets/show/ca1d7d90 – n3rV3 2013-04-24 17:42:24
我不发送类的实例,所以我认为这个链接是无关紧要的。 – tkf 2013-04-24 18:37:13