2012-09-20 56 views
2

我有一个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生成的工人)。

回答

1

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

相关问题