有人可以解释为什么此代码冻结(永久挂起)
Could someone explain why this code freezes (hangs forever),
import multiprocessing def foo(x): return x def main(): print(list(multiprocessing.Pool().imap(foo, iter([1, 2, 3])))) main()虽然此变体可以正常工作,
While this variant works fine,
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中冻结了……但是在这样低的水平下,我感觉调试很不合理.
Incidentally, being able to dynamically create multiprocessing.Pool() at a non-initialization stage in the application, and then use imap would be really helpful. I tried stepping through it in gdb, and it seems frozen at PyThread_acquire_lock ... but I feel pretty out-of-element debugging at such a low level.
推荐答案显然,这是Python 2.6.7的错误,并且至少已由Python 2.7.3修复.
Apparently this is a bug with Python 2.6.7, and has been fixed at least by Python 2.7.3.
这可以通过使用我的vimap包[ github/gatoatigrado/vimap来解决. ].
This can be worked around by using my vimap package [ github/gatoatigrado/vimap ].
更多推荐
Python:多处理imap&动态创建的池冻结
发布评论