सबप्रोसेस.कॉल का उपयोग करके बाहरी स्क्रिप्ट निष्पादित करते समय, मुख्य प्रोग्राम को रोकने से बचने के लिए नॉन-ब्लॉकिंग वर्कफ़्लो बनाए रखना आवश्यक है। यह लेख इस उद्देश्य को प्राप्त करने के लिए एक व्यापक समाधान प्रस्तुत करता है। यह विकल्प मुख्य प्रोग्राम को अवरुद्ध नहीं करता है, जिससे उपप्रोसेस के स्वतंत्र रूप से चलने के दौरान उसे अपना संचालन जारी रखने की अनुमति मिलती है। यहां एक उदाहरण है:
subprocess.Popen(["python", "slave.py"] sys.argv[1:])व्यापक उदाहरणsubprocess.Popen(["python", "slave.py"] sys.argv[1:])
इम्पोर्ट सबप्रोसेस
आयात समय
पी = सबप्रोसेस.पोपेन(['नींद', '5'])
जबकि p.poll() कोई नहीं है:
प्रिंट करें ('अभी भी सो रहा है')
समय.नींद(1)
प्रिंट ('अब नींद नहीं आ रही है। रिटर्नकोड %d' % p.returncode के साथ बाहर निकल गया)यह कोड 'स्लीप' कमांड को एसिंक्रोनस रूप से निष्पादित करता है, समय-समय पर इसकी स्थिति की जांच करता है जब तक कि यह पूरा न हो जाए।import subprocess
import time
p = subprocess.Popen(['sleep', '5'])
while p.poll() is None:
print('Still sleeping')
time.sleep(1)
print('Not sleeping any longer. Exited with returncode %d' % p.returncode)
पायथन संस्करण 3.5 और इसके बाद के संस्करण के लिए, एक अधिक आधुनिक और कुशल दृष्टिकोण में एसिंक्रोनस का उपयोग शामिल है। यह वास्तविक समवर्तीता की अनुमति देता है, जिससे कई कार्यों को एक साथ निष्पादित करने में सक्षम बनाया जा सकता है। यहाँ एक उदाहरण है:
import asyncio async def do_subprocess(): प्रिंट ('सबप्रोसेस स्लीपिंग') proc = asyncio.create_subprocess_exec('स्लीप', '5') का इंतजार करें रिटर्नकोड = प्रतीक्षित proc.wait() प्रिंट करें ('उपप्रक्रिया पूरी हो गई है। रिटर्न कोड = %d' % रिटर्नकोड) एसिंक डीईएफ़ स्लीप_रिपोर्ट(संख्या): मेरे लिए श्रेणी में (संख्या 1): प्रिंट('%d सेकंड तक सोया' % i) प्रतीक्षा करें asyncio.sleep(1) लूप = asyncio.get_event_loop() कार्य = [ asyncio.ensure_future(do_subprocess()), asyncio.ensure_future(sleep_report(5)), ] लूप.रन_अनटिल_कंप्लीट(asyncio.gather(*tasks)) लूप.क्लोज़()यह दृष्टिकोण सुनिश्चित करता है कि उपप्रक्रिया और मुख्य प्रोग्राम दोनों समवर्ती रूप से चलते हैं, प्रदर्शन और प्रतिक्रिया को अधिकतम करते हैं।अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3