8
我需要在一個進程中運行一個函數,它與其他所有內存完全隔離幾次。我想使用multiprocessing
(因爲我需要序列化來自函數的複雜輸出)。我將start_method
設置爲'spawn'
並使用maxtasksperchild=1
。我希望讓每個任務不同的過程,因此,看到一個不同的PID:multiprocessing.Pool與maxtasksperchild產生相等的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()
但是輸出我得到的是:
$ 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
...
所以進程不會被每個任務後重生。是否有一種每次都獲得新PID的自動方法(即,不爲每組進程啓動一個新池)?