मुझे एक प्रक्रिया में एक फ़ंक्शन चलाने की आवश्यकता है, जो कई अन्य स्मृति से पूरी तरह से अलग है। मैं इसके लिए multiprocessing
का उपयोग करना चाहता हूं (क्योंकि मुझे कार्यों से आने वाले जटिल आउटपुट को क्रमबद्ध करने की आवश्यकता है)। मैंने start_method
को 'spawn'
पर सेट किया है और maxtasksperchild=1
वाले पूल का उपयोग किया है। मैं प्रत्येक कार्य के लिए एक अलग प्रक्रिया पाने के लिए उम्मीद करेंगे, और इसलिए एक अलग पीआईडी देखें:multiprocessing.Pool maxtasksperchild के साथ बराबर पीआईडी
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
...
तो प्रक्रियाओं हर काम के बाद respawned नहीं किया जा रहा है । क्या हर बार एक नया पीआईडी प्राप्त करने का एक स्वचालित तरीका है (यानी प्रक्रियाओं के प्रत्येक सेट के लिए एक नया पूल शुरू किए बिना)?