मैं अपने शुरुआती छात्रों के लिए पुस्तकालय के साथ खेल रहा हूं, और मैं पाइथन में मल्टीप्रोसेसिंग मॉड्यूल का उपयोग कर रहा हूं। मैं इस समस्या का सामना किया: importing and using a module that uses multiprocessing without causing infinite loop on Windowsविंडोज़ पर एक नई प्रक्रिया शुरू करते समय पाइथन के मल्टीप्रोसेसिंग मॉड्यूल __main__ क्यों आयात करते हैं?
उदाहरण के लिए, मान लीजिए कि मैं एक मॉड्यूल mylibrary.py
है: यदि मैं पर main.py
चलाने
# main.py
import mylibrary
mylibrary.foo()
:
# mylibrary.py
from multiprocessing import Process
class MyProcess(Process):
def run(self):
print "Hello from the new process"
def foo():
p = MyProcess()
p.start()
और एक मुख्य कार्यक्रम है कि इस पुस्तकालय कॉल विंडोज़, यह नई प्रक्रिया में main.py आयात करने का प्रयास करता है, जिसका अर्थ है कि कोड फिर से निष्पादित किया जाता है जिसके परिणामस्वरूप प्रक्रिया उत्पादन के अनंत लूप होते हैं। मैं यह इसलिए की तरह ठीक कर सकते हैं:
import mylibrary
if __name__ == "__main__":
mylibrary.foo()
लेकिन, इस शुरुआती के लिए बहुत भ्रामक है, और इसके अलावा ऐसा लगता है जैसे कि यह आवश्यक नहीं होना चाहिए। नई प्रक्रिया mylibrary
में बनाई जा रही है, तो नई प्रक्रिया क्यों नहीं mylibrary
आयात करती है? main.py
को बदलने के बिना इस समस्या को हल करने का कोई तरीका है?
मैं पाइथन 2.7 का उपयोग कर रहा हूं।
यह उत्तर स्वीकार किया जाना चाहिए। – Marcin
मुझे यकीन है कि मुझे कुछ याद आ रहा है, लेकिन मेरा सवाल यह है कि बाल प्रक्रिया को फिर से सभी कोड चलाने होंगे। क्यों न सिर्फ मॉड्यूल ने नई प्रक्रिया शुरू की? – Laura
@ लौरा: इसे अपने सभी कोड को फिर से चलाने के लिए है, क्योंकि यदि ऐसा नहीं होता है, तो इसका कोड नहीं होगा। बाल प्रक्रिया पूरी तरह से ताजा शुरू होती है, और यदि आप चाहते हैं कि यह आपके कार्य करे, तो इसे आपके कोड की आवश्यकता है। –