2008-08-22 16 views
21

मैं कुछ तर्क कैसे कार्यान्वित करूं जो मुझे विंडोज़ पर पुन: पेश करने की अनुमति देगा जो मेरे पास लिनक्स पर fork() सिस्टम कॉल के साथ पाइथन पर है?विंडोज़ में नकली() को डुप्लिकेट करने का सबसे अच्छा तरीका क्या है?

मैं विशेष रूप से एसएपीआई कॉम घटक पर एक विधि निष्पादित करने की कोशिश कर रहा हूं, जबकि अवरुद्ध या प्रतीक्षा किए बिना मुख्य धागे में अन्य तर्क जारी रखते हुए।

उत्तर

0

शायद पाइथन के लिए स्पॉन() का एक संस्करण? http://en.wikipedia.org/wiki/Spawn_(operating_system)

+0

यही है कि इन दिनों विंडोज़ पर 'मल्टीप्रोसेसिंग' क्या है। https://docs.python.org/3.5/library/multiprocessing.html?highlight=spawn#contexts-and-start-methods – clacke

3

os module में प्रक्रिया प्रबंधन कार्यों पर नज़र डालें। नई प्रक्रियाओं को कई अलग-अलग तरीकों से, सिंक्रनाइज़ और असीमित रूप से शुरू करने के लिए कार्य हैं।

मुझे यह भी ध्यान रखना चाहिए कि विंडोज कार्यक्षमता प्रदान नहीं करता है जो अन्य प्रणालियों पर बिल्कुल फोर्क() की तरह है। विंडोज पर मल्टीप्रोसेसिंग करने के लिए, आपको threading मॉड्यूल का उपयोग करने की आवश्यकता होगी।

+8

'सबप्रोसेस 'और' मल्टीप्रोसेसिंग '(आरजेब्राडी द्वारा सुझाया गया)' ओएस 'के लिए बेहतर विकल्प हो सकता है और 'थ्रेडिंग'। – jfs

+1

'थ्रेडिंग 'सीपीथॉन में वास्तविक मल्टीप्रोसेसिंग नहीं करता है। – clacke

3

ओएस मॉड्यूल है कि ग्रेग ने कहा में प्रक्रिया प्रबंधन कोड के अलावा, आप भी सूत्रण मॉड्यूल पर एक नज़र रखना चाहिए: https://docs.python.org/library/threading.html

from threading import Thread 

def separate_computations(x, y): 
    print sum(x for i in range(y)) # really expensive multiplication 

Thread(target=separate_compuations, args=[57, 83]).start() 
print "I'm continuing while that other function runs in another thread!" 
2

संभव है कि आप भी प्रसंस्करण मॉड्यूल का उपयोग कर की तरह (http://pypi.python.org/pypi/processing) । थ्रेडिंग मॉड्यूल के समान एपीआई के साथ समांतर सिस्टम लिखने के लिए इसकी कार्यक्षमता बहुत है ...

+1

पायथन 2.6/3.0 (अक्टूबर और दिसंबर 2008) के रूप में, 'प्रोसेसिंग' मानक पुस्तकालय का हिस्सा 'मल्टीप्रोसेसिंग' के रूप में है। – clacke

3

एली से थ्रेडिंग उदाहरण थ्रेड चलाएगा, लेकिन उस पंक्ति के बाद कोई भी काम नहीं करेगा।

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

+2

'मल्टीप्रोसेसिंग 'मॉड्यूल मानक पुस्तकालय का एक हिस्सा है। 'subprocess' बाहरी प्रोग्राम के लिए फिट बैठता है, 'मल्टीप्रोसेसिंग' पायथन कोड के लिए फिट बैठता है। – jfs

10

fork()वास्तव मेंCygwin तहत Windows में दोहराया गया है, है, लेकिन यह बहुत बालों है।

सिगविन में कांटा कॉल विशेष रूप से दिलचस्प है क्योंकि यह Win32 API के शीर्ष पर अच्छी तरह से मैप नहीं करता है। यह सही ढंग से लागू करना बहुत मुश्किल बनाता है।

इस हैक के विवरण के लिए The Cygwin User's Guide देखें।

16

पायथन multiprocessing module का उपयोग करें जो हर जगह काम करेगा।

यहां एक IBM developerWords article है जो दिखाता है कि os.fork() से multiprocessing मॉड्यूल में कैसे परिवर्तित करें।

+1

यह सही उत्तर है, लेकिन विंडोज़ पर 'फोर्क()' की कमी के कारण, कुछ चेतावनी हैं, मुख्य यह सुनिश्चित करना है कि किसी भी स्क्रिप्ट को 'if __name__ == "__main __" द्वारा संरक्षित किया गया है। गार्ड अगर यह किसी भी कोड को कॉल करना है जो मल्टीप्रोसेसिंग करता है। उत्पन्न प्रक्रिया ताजा शुरू होती है और राज्य को पुनर्निर्माण करने में सक्षम होने के लिए मॉड्यूल लोड करने की आवश्यकता होती है। – clacke

संबंधित मुद्दे

 संबंधित मुद्दे