Process和Pool类是否共享相同的worker



我有一个python脚本,它正在执行一些map reduce-ish ETL。我不是代码的创建者,但我正在分析/诊断它的运行时以获得一些改进。

在软件包中,它使用一个"过程":

worker = Process(target=grab_worker)
worker.start() 

这做了一个永久的FTP循环,从我们的CDN中提取新文件,不能包括FTP代码,但不应该与问题相关

在代码的后面,我们创建了一个工作Pool的实例,它运行一些异步函数:

workerpool =  multiprocessing.Pool(processes=4)
# ...
resultobjs[k] = workerpool.apply_async(func, args=fargs)

同样,其中的底层代码应该与我认为还不包括代码的问题无关。

我的问题是,在Python中,一旦我创建了工作者Pool,那里的工作者会与Process"共享"吗?

换言之,如果我第一次创建一个进程在做某件事的worker,那么在稍后的执行中,当我使用池类创建worker时,当循环返回并尝试运行向进程注册的函数时,它会使用以前创建的worker吗?

或者,它是否通过允许每个类实例仅引用其派生的工作线程来保持"热端热端冷端"(Process重用其先前创建的一个工作线程,Pool继续使用其指定的工作线程,而Process使用Pool生成的工作线程)。

mp.Processmp.Pool一无所知。因此,对mp.Process的调用不会以某种方式使用由mp.Pool派生的进程。

最新更新