2013-05-22 29 views
0

有人能解释为什么这代码冻结(挂起永远),的Python:多处理IMAP和动态创建的池冻结

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() 

顺便提及,能够在非initializatio动态创建multiprocessing.Pool()在应用程序的n阶段,然后使用imap会非常有帮助。我尝试着在gdb中逐步完成它,并且它似乎被冻结在PyThread_acquire_lock ......但是我觉得在这么低的级别上进行了非常奇怪的调试。

回答