Bir işlemde, tüm diğer bellekten tamamen izole edilen bir işlevi çalıştırmam gerekir. Bunun için multiprocessing
'u kullanmak istiyorum (çünkü fonksiyonlardan gelen karmaşık bir çıkışı serileştirmem gerekiyor). start_method
'u 'spawn'
'a ayarlıyorum ve maxtasksperchild=1
ile bir havuz kullanın. Her görev için farklı bir süreç olsun bekliyoruz ve bu nedenle farklı bir PID görecekti: alıyorum çıkışı Ancakçok işlemcili maxtasksperchild ile eşittir PID'ler üretir
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
...
Yani süreçler her görevi sonrasında respawned edilmiyor . Her seferinde yeni bir PID almanın otomatik bir yolu var mı (yani her bir süreç kümesi için yeni bir havuz oluşturmadan)?