python - Process 和 Pool 类是否共享同一个 worker?

标签 python process multiprocess

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

关于python - Process 和 Pool 类是否共享同一个 worker?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12517346/

相关文章:

c - 消息队列中的两种消息

python - 告诉消费者停止等待队列元素

python - Curve_Fit 的结果不正确

python - 有没有一种方便的方法可以将文件 uri 映射到 os.path?

c - 在子进程发出完成信号后,SIGKILL 将无法停止子进程

linux - 分离父进程的终端

node.js - 在 node.js 中使用参数生成过程

python structured/recarray 类型转换行为

python - print 的 end 参数会导致 time.sleep 的不同行为

python - 多进程 sqlite INSERT : "database is locked"