有人可以解释为什么这段代码会冻结(永远挂起),
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
......但我觉得在如此低的级别上进行非常元素外的调试。