इस पायथन लिपि में, एकाधिक 'cat | zgrep' कमांड को रिमोट सर्वर पर क्रमिक रूप से निष्पादित किया जाता है और उनके आउटपुट को प्रोसेसिंग के लिए व्यक्तिगत रूप से एकत्र किया जाता है। हालाँकि, दक्षता बढ़ाने के लिए, हमारा लक्ष्य इन कमांडों को समानांतर में निष्पादित करना है। &&&]
यह कोड एक साथ पांच शेल कमांड लॉन्च करता है और उनके एग्जिट कोड एकत्र करता है। ध्यान दें कि इस संदर्भ में & वर्ण आवश्यक नहीं है क्योंकि पॉपन डिफ़ॉल्ट रूप से आदेशों के पूरा होने की प्रतीक्षा नहीं करता है। आपको उनकी स्थिति को पुनः प्राप्त करने के लिए .wait() को स्पष्ट रूप से कॉल करना होगा। . निम्नलिखित उदाहरण पर विचार करें:
#!/usr/bin/env python
from subprocess import Popen
# create a list of subprocesses
processes = [Popen("echo {i:d}; sleep 2; echo {i:d}".format(i=i), shell=True) for i in range(5)]
# collect statuses of subprocesses
exitcodes = [p.wait() for p in processes]
यह कोड समानांतर में उपप्रक्रियाएं चलाता है और थ्रेड्स का उपयोग करके समवर्ती रूप से उनके आउटपुट एकत्र करता है।
पायथन संस्करण 3.8 और उससे ऊपर के लिए, एसिंकियो उपप्रक्रियाओं को समवर्ती रूप से निष्पादित करने का एक शानदार तरीका प्रदान करता है। यहाँ एक उदाहरण है:
#!/usr/bin/env python
from multiprocessing.dummy import Pool # thread pool
from subprocess import Popen, PIPE, STDOUT
# create a list of subprocesses with output handling
processes = [Popen("echo {i:d}; sleep 2; echo {i:d}".format(i=i), shell=True,
stdin=PIPE, stdout=PIPE, stderr=STDOUT, close_fds=True)
for i in range(5)]
# collect outputs in parallel
def get_lines(process):
return process.communicate()[0].splitlines()
outputs = Pool(len(processes)).map(get_lines, processes)
यह कोड दर्शाता है कि एक ही थ्रेड के भीतर उपप्रक्रियाओं को एक साथ कैसे चलाया जाए।
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3