ThreadPool
और Pool
multiprocessing
मॉड्यूल में अंतर क्या है।पाइथन मल्टीप्रोसेसिंग मॉड्यूल में थ्रेडपूल बनाम पूल के बीच क्या अंतर है
from multiprocessing import Pool
import os, time
print("hi outside of main()")
def hello(x):
print("inside hello()")
print("Proccess id: ", os.getpid())
time.sleep(3)
return x*x
if __name__ == "__main__":
p = Pool(5)
pool_output = p.map(hello, range(3))
print(pool_output)
मैं निम्नलिखित उत्पादन देखें::
hi outside of main()
hi outside of main()
hi outside of main()
hi outside of main()
hi outside of main()
hi outside of main()
inside hello()
Proccess id: 13268
inside hello()
Proccess id: 11104
inside hello()
Proccess id: 13064
[0, 1, 4]
"ThreadPool" के साथ:
from multiprocessing.pool import ThreadPool
import os, time
print("hi outside of main()")
def hello(x):
print("inside hello()")
print("Proccess id: ", os.getpid())
time.sleep(3)
return x*x
if __name__ == "__main__":
p = ThreadPool(5)
pool_output = p.map(hello, range(3))
print(pool_output)
मैं देख रहा हूँ जब मैं अपने कोड की कोशिश, इस मैं देख रहा हूँ मुख्य अंतर यह है निम्नलिखित आउटपुट:
hi outside of main()
inside hello()
inside hello()
Proccess id: 15204
Proccess id: 15204
inside hello()
Proccess id: 15204
[0, 1, 4]
मेरी ques माहौल हैं:
क्यों "बाहर __main __()"
Pool
में हर बार चलाया जाता है?multiprocessing.pool.ThreadPool
नई प्रक्रियाओं को जन्म नहीं देता है? यह सिर्फ नए सूत्र बनाता है?यदि ऐसा है तो क्या
multiprocessing.pool.ThreadPool
का उपयोग कर बसthreading
मॉड्यूल के लिए विरोध के रूप में क्या अंतर है?
मैं नहीं कहीं भी ThreadPool
के लिए किसी भी आधिकारिक दस्तावेज देख पा रहे हैं, किसी को मेरी मदद कर सकते बाहर जहाँ मैं इसे पा सकते हैं?
जैसा कि मुझे पता है, पाइथन में जीआईएल की वजह से, पाइथन की बहुप्रवाह बहु-धागे की तरह दिखती है लेकिन यह वास्तविक नहीं है। यदि आप पाइथन के साथ अपने बहु-कोर का लाभ उठाना चाहते हैं, तो आपको बहु-प्रोसेसिंग का उपयोग करने की आवश्यकता है। आधुनिक कंप्यूटर में, एक प्रक्रिया बनाने और धागे बनाने के लगभग एक ही लागत है। – Yves
किसी थ्रेड को बनाने के लिए एक प्रक्रिया बनाने के लिए समान लागत हो सकती है, लेकिन थ्रेड्स के बीच संचार करने से प्रक्रियाओं के बीच संचार करने के लिए बहुत अलग लागत होती है (जब तक कि आप साझा स्मृति का उपयोग नहीं करते)। इसके अलावा, जीआईएल के बारे में आपकी टिप्पणी केवल आंशिक रूप से सच है: इसे आई/ओ संचालन के दौरान जारी किया जाता है और सीपीयू-बाध्य संचालन के दौरान भी कुछ पुस्तकालयों (उदा। Numpy) द्वारा जारी किया जाता है। फिर भी, जीआईएल अंततः पायथन में अलग प्रक्रियाओं का उपयोग करने का कारण है। –