Python:多处理imap&动态创建的池冻结

编程入门 行业动态 更新时间:2024-10-27 16:36:39
本文介绍了Python:多处理imap&动态创建的池冻结的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

有人可以解释为什么此代码冻结(永久挂起)

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&动态创建的池冻结

本文发布于:2023-11-24 11:42:27,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1625058.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:多处   动态   Python   amp   imap

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!