Python池进程管理

时间:2018-02-24 23:52:20

标签: python python-multiprocessing

我正在运行一些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是否使用三个流程进行管理?

1 个答案:

答案 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适用于池工作者维护,异步任务和结果处理。