0

有人可以解释为什么这段代码会冻结(永远挂起),

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......但我觉得在如此低的级别上进行非常元素外的调试。

4

1 回答 1

0

显然这是 Python 2.6.7 的一个错误,并且至少已被 Python 2.7.3 修复。

这可以通过使用我的vimap包 [ https://github.com/gatoatigrado/vimap ] 来解决。

于 2013-05-22T18:00:29.010 回答