मेरे पास श्रमिकों का एक छोटा सा पूल है (4) और कार्यों की एक बड़ी सूची (5000 ~) है। मैं पूल का उपयोग कर रहा हूं और map_async() के साथ कार्यों को भेज रहा हूं। क्योंकि जो काम मैं चला रहा हूं वह काफी लंबा है, मैं 1 का एक टुकड़ा मजबूर कर रहा हूं ताकि एक लंबी प्रक्रिया कुछ छोटे लोगों को पकड़ न सके।पायथन: मैं multiprocessing.Pool में लंबित कार्यों की संख्या कैसे देख सकता हूं?
मैं क्या करना चाहता हूं समय-समय पर जांचें कि कितने कार्य सबमिट किए जाने हैं। मुझे पता है कि ज्यादातर 4 सक्रिय होंगे, मुझे चिंता है कि प्रक्रिया के लिए कितने शेष हैं।
मैंने चारों ओर गुमराह किया है और मुझे यह कोई नहीं मिल रहा है।
कुछ सरल कोड मदद करने के लिए:
import multiprocessing
import time
def mytask(num):
print('Started task, sleeping %s' % num)
time.sleep(num)
pool = multiprocessing.Pool(4)
jobs = pool.map_async(mytask, [1,2,3,4,5,3,2,3,4,5,2,3,2,3,4,5,6,4], chunksize=1)
pool.close()
while True:
if not jobs.ready():
print("We're not done yet, %s tasks to go!" % <somethingtogettasks>)
jobs.wait(2)
else:
break
मुझे ध्यान रखना चाहिए कि मैं एक आरएचईएल -6 प्रणाली पर पायथन 2.6 का उपयोग कर रहा हूं, हालांकि मैं विभिन्न संस्करणों/प्लेटफार्मों पर उदाहरणों के लिए खुला हूं। – jkeating
स्थैतिक चर जो कार्य पूर्ण होने पर घट जाता है? (और जब कार्य स्पष्ट रूप से शुरू होता है तो वृद्धि हुई)। – Enders
कार्य तब तक "शुरू नहीं होते" जब तक कार्यकर्ता उन्हें नहीं ले जाता। मुझे लगता है कि अगर मैंने एक वैश्विक बनाया है जो कार्यों का आकार था, तो प्रत्येक बार कार्य शुरू होने पर इसे कम किया जाता है, लेकिन यह थोड़ा अजीब है और कुछ थ्रेड सुरक्षा विचारों की आवश्यकता होती है। – jkeating