【发布时间】:2019-10-25 07:02:06
【问题描述】:
我正在熟悉 Python 的 multiprocessing 模块。以下代码按预期工作:
#outputs 0 1 2 3
from multiprocessing import Pool
def run_one(x):
print x
return
pool = Pool(processes=12)
for i in range(4):
pool.apply_async(run_one, (i,))
pool.close()
pool.join()
但是,现在,如果我在上面的代码周围包装一个函数,print 语句不会被执行(或者至少重定向输出):
#outputs nothing
def run():
def run_one(x):
print x
return
pool = Pool(processes=12)
for i in range(4):
pool.apply_async(run_one, (i,))
pool.close()
pool.join()
如果我将run_one 定义移到run 之外,当我调用run() 时,输出又是预期的:
#outputs 0 1 2 3
def run_one(x):
print x
return
def run():
pool = Pool(processes=12)
for i in range(4):
pool.apply_async(run_one, (i,))
pool.close()
pool.join()
我在这里缺少什么?为什么第二个 sn-p 不打印任何东西?如果我只是调用run_one(i) 函数而不是使用apply_async,则所有三个代码的输出都相同。
【问题讨论】:
标签: python asynchronous multiprocessing python-multiprocessing