我有一个 python 脚本,它正在执行一些 map reduce-ish ETL。我不是代码的原创者,但致力于分析/诊断其运行时以进行一些改进。
在包中,它使用了一个“进程”:
worker = Process(target=grab_worker)
worker.start()
这会执行一个永久的 FTP 循环以从我们的 CDN 中提取新文件,不能包含 FTP 代码但不应该与问题相关
在代码的后面,我们创建了一个运行一些异步函数的 worker Pool
实例:
workerpool = multiprocessing.Pool(processes=4)
# ...
resultobjs[k] = workerpool.apply_async(func, args=fargs)
同样,其中的底层代码应该与我认为的问题无关,所以还不包括代码。
我的问题是,在 Python 中,一旦我创建了 worker Pool
,那里的 worker 是否会与 Process
“共享”?
换句话说,如果我首先创建 1 个工作进程并执行某些操作,稍后在我创建具有池类的工作人员时执行,当循环返回并尝试运行在进程中注册的函数时,它会使用以前创建的 worker ?
或者,相反,它是否通过允许每个类实例仅引用它生成的 worker (Process
重用它之前创建的一个 worker )来保持“热端热和冷端冷” ,并且 Pool
继续使用其指定的工作人员,而 Process
使用 Pool
生成的工作人员。
最佳答案
mp.Process
对mp.Pool
一无所知。
因此,对 mp.Process
的调用不会以某种方式使用 mp.Pool
生成的进程。
关于python - Process 和 Pool 类是否共享同一个 worker?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12517346/