我有一个python脚本,正在做一些映射reduce-ish ETL。我不是代码的创始人,但正在努力分析/诊断其运行时间以进行一些改进。进程和池类是否共享相同的工人?
在封装,它采用的是“过程”:
worker = Process(target=grab_worker)
worker.start()
,做了perpectual FTP循环,从我们的CDN提取新文件,不能包含FTP代码,但不应该是相关的问题
稍后在代码中,我们创建了一个工人Pool
的实例,它运行一些非同步功能:
workerpool = multiprocessing.Pool(processes=4)
# ...
resultobjs[k] = workerpool.apply_async(func, args=fargs)
再次,底层代码缰绳应与我认为不包括代码的问题无关。
我的问题是,在Python中,一旦我创建了工作人员Pool
,工作人员将与Process
“共享”吗?换句话说,如果我首先创建1个工作进程正在执行某个操作,稍后在执行时使用一个池类创建工作人员,当循环返回并尝试运行在进程中注册的函数时,它会使用以前创建的工人?
或者,相反,它保持“热侧热和冷端冷”允许每个类实例仅引用它已经催生了工人(Process
重用它的一个工人以前创建,并Pool
继续使用其指定的工人与Process
使用由Pool
生成的工人)。