我有一个 python 脚本正在执行一些 map reduce-ish ETL。我不是代码的发起者,而是致力于分析/诊断其运行时以进行一些改进。
在包中,它使用了一个“进程”:
worker = Process(target=grab_worker)
worker.start()
从我们的 CDN 中提取新文件的永久 FTP 循环,不能包含 FTP 代码,但不应该与问题相关
在后面的代码中,我们创建了一个Pool
运行一些异步函数的 worker 实例:
workerpool = multiprocessing.Pool(processes=4)
# ...
resultobjs[k] = workerpool.apply_async(func, args=fargs)
同样,其中的基础代码应该与我认为不包括代码的问题无关。
我的问题是,在 Python 中,一旦我创建了工人Pool
,那里的工人会与Process
?
换句话说,如果我首先创建 1 个带有进程执行某事的工作人员,然后在执行时创建具有池类的工作人员,当循环返回并尝试运行向该过程注册的函数时,它会使用先前创建的工作人员吗?
或者,相反,它是否通过允许每个类实例仅引用它产生的工人(Process
重用其先前创建的一个工人,并Pool
继续使用其指定的工人与Process
使用产生的工人Pool
)。