我正在运行一些Python代码,并在我只使用一个进程实例化Pool
时实现,例如:
from multiprocessing.pool import Pool
from time import sleep
def f(i):
print(i)
sleep(10)
with Pool(1) as p:
p.map(f, [i for i in range(100)])
实际上目前正在运行五个进程。我还注意到了一个模式:如果我用1,2,3,...进程实例化Pool
,Python启动的进程数量为5,6,7,......我和# 39;好奇:Pool
是否使用三个流程进行管理?
答案 0 :(得分:1)
使用Pool(1)
,您将获得2个进程,主进程(pid 31070)和一个工作进程(pid 31071),但主进程中有3个额外threads/LWPs(LWP /线程ID 31072/31073/31074):
PID PPID LWP NLWP CMD
31070 21240 31070 4 python3 so_48968836_mp.py
31070 21240 31072 4 python3 so_48968836_mp.py
31070 21240 31073 4 python3 so_48968836_mp.py
31070 21240 31074 4 python3 so_48968836_mp.py
31071 31070 31071 1 python3 so_48968836_mp.py
those three threads适用于池工作者维护,异步任务和结果处理。