ऐसा लगता है कि आप क्या चाहते हैं: multiprocessing.current_process()
। उदाहरण के लिए:
import multiprocessing
def f(x):
print multiprocessing.current_process()
return x * x
p = multiprocessing.Pool()
print p.map(f, range(6))
आउटपुट:
$ python foo.py
<Process(PoolWorker-1, started daemon)>
<Process(PoolWorker-2, started daemon)>
<Process(PoolWorker-3, started daemon)>
<Process(PoolWorker-1, started daemon)>
<Process(PoolWorker-2, started daemon)>
<Process(PoolWorker-4, started daemon)>
[0, 1, 4, 9, 16, 25]
इस प्रक्रिया वस्तु ही देता है, तो प्रक्रिया उसकी अपनी पहचान का हो सकता है। आप एक अद्वितीय संख्यात्मक आईडी के लिए id
पर भी कॉल कर सकते हैं - cpython में, यह प्रक्रिया ऑब्जेक्ट का स्मृति पता है, इसलिए नहीं लगता है ओवरलैप की कोई संभावना है। अंत में, आप ident
या pid
प्रक्रिया की संपत्ति का उपयोग कर सकते हैं - लेकिन यह प्रक्रिया शुरू होने के बाद ही सेट हो जाती है।
इसके अलावा, स्रोत को देखते हुए, मुझे लगता है कि ऑटोगनेरेटेड नाम (जैसा कि Process
ऊपर के पहले स्ट्रिंग्स में पहले मान द्वारा उदाहरण दिया गया है) अद्वितीय हैं। multiprocessing
प्रत्येक प्रक्रिया के लिए itertools.counter
ऑब्जेक्ट रखता है, जिसका उपयोग किसी भी बच्चे की प्रक्रियाओं के लिए _identity
ट्यूपल उत्पन्न करने के लिए किया जाता है। तो शीर्ष-स्तरीय प्रक्रिया एकल प्रक्रिया आईडी के साथ बाल प्रक्रिया का उत्पादन करती है, और वे दो-मूल्य आईडी के साथ प्रक्रिया को जन्म देती हैं, और इसी तरह। फिर, यदि Process
कन्स्ट्रक्टर को कोई नाम पास नहीं किया गया है, तो यह ':'.join(...)
का उपयोग करके, _identity के आधार पर बस autogenerates the name है। Pool
alters the namereplace
का उपयोग कर प्रक्रिया के, स्वत: उत्पन्न आईडी को छोड़कर।
इस सब का नतीजा है कि हालांकि दो Process
तों एक ही नाम हो सकता है, क्योंकि आप जब आपने उन्हें बनाया उन्हें एक ही नाम असाइन कर सकते हैं, वे अद्वितीय हैं यदि आप नाम को स्पर्श नहीं करते है पैरामीटर। इसके अलावा, आप सैद्धांतिक रूप से एक अद्वितीय पहचानकर्ता के रूप में _identity
का उपयोग कर सकते हैं; लेकिन मैं इकट्ठा करता हूं कि उन्होंने एक कारण के लिए उस परिवर्तनीय निजी बनाया!
कार्रवाई में ऊपर का एक उदाहरण:
import multiprocessing
def f(x):
created = multiprocessing.Process()
current = multiprocessing.current_process()
print 'running:', current.name, current._identity
print 'created:', created.name, created._identity
return x * x
p = multiprocessing.Pool()
print p.map(f, range(6))
आउटपुट:
$ python foo.py
running: PoolWorker-1 (1,)
created: Process-1:1 (1, 1)
running: PoolWorker-2 (2,)
created: Process-2:1 (2, 1)
running: PoolWorker-3 (3,)
created: Process-3:1 (3, 1)
running: PoolWorker-1 (1,)
created: Process-1:2 (1, 2)
running: PoolWorker-2 (2,)
created: Process-2:2 (2, 2)
running: PoolWorker-4 (4,)
created: Process-4:1 (4, 1)
[0, 1, 4, 9, 16, 25]
क्यों कुछ UUID तरह यादृच्छिक का उपयोग नहीं? –
@ लूपररच - क्या आप इसका मतलब उस पर विस्तार कर सकते हैं? – JoshAdel
उदाहरण के लिए '' प्रक्रिया = प्रक्रिया (लक्ष्य = foo, name = uuid.uuid4() हेक्स) '' आपकी प्रक्रियाओं के लिए अद्वितीय नाम देगा। –