我有一个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.Process
对mp.Pool
一无所知。因此,对mp.Process
的调用不会以某种方式使用由mp.Pool
派生的进程。