विंडोज़ पर रनटाइम त्रुटि अजगर मल्टीप्रोसेसिंग की कोशिश कर रहा है

| | | | | | | | | | | | | | | | | | | |

मैं विंडोज़ मशीन पर थ्रेडिंग और मल्टीप्रोसेसिंग का उपयोग करके अपना पहला औपचारिक पायथन प्रोग्राम आज़मा रहा हूं। हालांकि, मैं निम्नलिखित संदेश देने वाले अजगर के साथ प्रक्रियाओं को लॉन्च करने में असमर्थ हूं। बात यह है कि, मैं अपने धागे को मुख्य मॉड्यूल में लॉन्च नहीं कर रहा हूं। थ्रेड्स को एक क्लास के अंदर एक अलग मॉड्यूल में हैंडल किया जाता है।

EDIT: वैसे यह कोड ubuntu पर ठीक चलता है। विंडोज़ पर बिल्कुल नहीं

RuntimeError: मौजूदा प्रक्रिया के बूटस्ट्रैपिंग चरण के समाप्त होने से पहले एक नई प्रक्रिया शुरू करने का प्रयास करें। इसका शायद मतलब है कि आप विंडोज़ पर हैं और आप मुख्य मॉड्यूल में उचित मुहावरे का उपयोग करना भूल गए हैं: यदि __name__ == "__main__":freeze_support() ... "freeze_support ()" लाइन को छोड़ा जा सकता है यदि प्रोग्राम है विंडोज़ निष्पादन योग्य बनाने के लिए जमे हुए नहीं जा रहे हैं। 

मेरा मूल कोड काफी लंबा है, लेकिन मैं कोड के संक्षिप्त संस्करण में त्रुटि को पुन: उत्पन्न करने में सक्षम था। यह दो फाइलों में विभाजित है, पहला मुख्य मॉड्यूल है और मॉड्यूल को आयात करने के अलावा बहुत कम करता है जो प्रक्रियाओं/धागे को संभालता है और एक विधि को कॉल करता है। दूसरा मॉड्यूल है जहां कोड का मांस है। () Extractor.runInParallel(numProcesses=2, numThreads=4)


parallelTestModule.py:

import मल्टीप्रोसेसिंग आयात से मल्टीप्रोसेसिंग प्रक्रिया आयात थ्रेडिंग क्लास थ्रेडरनर (थ्रेडिंग। थ्रेड): """ यह वर्ग एक रनिंग थ्रेड के एकल उदाहरण का प्रतिनिधित्व करता है""" def __init__(self, name): थ्रेडिंग। थ्रेड.__init__(self) self.name = नाम डीईएफ़ रन (स्व): प्रिंट सेल्फ.नाम," "क्लास प्रोसेसरनर:" "" यह वर्ग एक चल रही प्रक्रिया के एकल उदाहरण का प्रतिनिधित्व करता है """ डीईएफ़ रनप (सेल्फ, पिड, numThreads): माइथ्रेड्स = [] tid के लिए इन रेंज (numThreads): नाम = "Proc-"+str(pid)+"-Thread-"+str(tid) th = ThreadRunner(name) mythreads.append(th) for i inmythreads: i.start() मेरे लिए मिथ्रेड में: i.join () वर्ग समानांतर एक्स्ट्रेक्टर: def runInParallel (स्वयं, numProcesses, numThreads): myprocs = [] prunner = ProcessRunner () pid के लिए रेंज (numProcesses) में: pr = प्रक्रिया (लक्ष्य = prunner.runp, args = (pid, numThreads)) myprocs.append (pr) # यदि __name__ == "parallelTestModule": #यह काम नहीं करता है # अगर __name__ == "__main__": # यह स्पष्ट रूप से काम नहीं करता है ()