有人可以解释为什么这段代码会冻结(永远挂起),
import multiprocessing
def foo(x): return x
def main():
print(list(multiprocessing.Pool().imap(foo, iter([1, 2, 3]))))
main()
虽然这种变体可以正常工作,但
import multiprocessing
def foo(x): return x
pool = multiprocessing.Pool()
def main():
print(list(pool.imap(foo, iter([1, 2, 3]))))
main()
与此一样,
import multiprocessing
def foo(x): return x
def main():
print(list(multiprocessing.Pool().map(foo, [1, 2, 3])))
main()
顺便说一句,能够在应用程序的非初始化阶段动态创建multiprocessing.Pool(),然后使用imap将非常有帮助。我尝试在gdb
中单步执行它,它似乎冻结在PyThread_acquire_lock
...但我觉得在如此低的级别上进行了非常多的元素调试。
答案 0 :(得分:0)
显然这是Python 2.6.7的一个错误,至少已经通过Python 2.7.3修复了。
这可以通过使用我的vimap
包[https://github.com/gatoatigrado/vimap]。