निम्न स्क्रिप्ट का एक साथ कई कार्यों को निष्पादित करने का उद्देश्य है, लेकिन मुझे नहीं पता कि यह सही तरीके से क्यों काम नहीं कर रहा है।
फ़ंक्शन अनुक्रमिक तरीके से निष्पादित किए जाते हैं, समानांतर नहीं।कई कार्यों को एक साथ निष्पादित करने के लिए ग्रीनलेट का उपयोग करने में समस्या
मैं स्पष्ट करने के लिए किसी भी सुझाव की सराहना करता हूं, मैं क्या गलत कर रहा हूं।
import time
import eventlet
EXECUTION_TIMEOUT = 10
def example(name, steps_limit):
print 'Starting process %s with %d steps' % (name, steps_limit)
for i in range(1, steps_limit+1):
print "Process %s, step %d" % (name, i)
time.sleep(2)
print 'Finishing process %s with %d steps' % (name, steps_limit)
def fetch(input_data):
example(input_data['name'], input_data['steps'])
test_data = [{'name':'proceso1', 'steps':3},
{'name':'proceso2', 'steps':5},
{'name':'proceso3', 'steps':6},
]
def main():
#Setting up time out
timeout = eventlet.timeout.Timeout(EXECUTION_TIMEOUT)
#initialize pool
pool = eventlet.GreenPool(size=1000)
try:
for hits in pool.imap(fetch, test_data):
pass
except eventlet.Timeout:
print 'Operation interrupted by timeout concept'
finally:
timeout.cancel()
if __name__ == '__main__':
main()
कृपया आपके द्वारा प्राप्त किए जा रहे किसी भी त्रुटि संदेश को शामिल करें, और जो भी हो रहा है उसके बारे में अधिक विशिष्ट हो। क्या यह तुरंत वापस आता है? क्या यह हमेशा के लिए लटका है? आपने इसे ठीक करने की क्या कोशिश की है? – TorelTwiddler
त्रुटि संदेश नहीं है, यह हमेशा के लिए नहीं लटका है। समस्या यह है कि प्रक्रिया अनुक्रमिक तरीके से होती है, न कि अनियंत्रित। प्रत्येक कार्य शुरू होता है, जब पिछला समाप्त होता है। मुझे यह नहीं चाहिए। – rmaceissoft
मुझे पहले से ही पता है कि मेरी त्रुटि क्या है। मैं "eventlet.sleep" के बजाय "time.sleep" का उपयोग कर रहा हूं। अंतर यह है कि अंतिम पूरे दुभाषिया को अवरुद्ध नहीं करता है और इस प्रकार अन्य ग्रीनलेट्स को उनके अनुरोधों के साथ आगे बढ़ने देता है। इस समय के लिए मेरे लिए धन्यवाद; -) .... और मुझे उम्मीद है कि यह डमी प्रश्न दूसरों को मदद करता है .... – rmaceissoft