小编Zah*_*Zah的帖子

multiprocessing.Pool with maxtasksperchild产生相等的PID

我需要在一个进程中运行一个函数,它几次与所有其他内存完全隔离.我想用multiprocessing它(因为我需要序列化来自函数的复杂输出).我设置start_method'spawn'并使用一个带游泳池 maxtasksperchild=1.我期望为每个任务获得不同的过程,因此看到不同的PID:

import multiprocessing
import time
import os

def f(x):
    print("PID: %d" % os.getpid())
    time.sleep(x)
    complex_obj = 5 #more complex axtually
    return complex_obj

if __name__ == '__main__':
    multiprocessing.set_start_method('spawn')
    pool = multiprocessing.Pool(4, maxtasksperchild=1)
    pool.map(f, [5]*30)
    pool.close()
Run Code Online (Sandbox Code Playgroud)

但是我得到的输出是:

$ python untitled1.py 
PID: 30010
PID: 30009
PID: 30012
PID: 30011
PID: 30010
PID: 30009
PID: 30012
PID: 30011
PID: 30018
PID: 30017
PID: 30019
PID: 30020
PID: 30018
PID: 30019
PID: 30017
PID: 30020
...
Run Code Online (Sandbox Code Playgroud)

因此,每个任务完成后都不会重新生成进程.有没有一种自动获取新PID的方法(即没有为每组进程启动新池)?

python pid multiprocessing python-3.x

10
推荐指数
1
解决办法
5270
查看次数

标签 统计

multiprocessing ×1

pid ×1

python ×1

python-3.x ×1