2016-08-08 16 views
5

मेरे पास छवि पथों की एक सूची है जो मैं प्रक्रियाओं या धागे के बीच विभाजित करना चाहता हूं ताकि प्रत्येक प्रक्रिया सूची के कुछ भाग को संसाधित करे। प्रसंस्करण में डिस्क से लोडिंग छवि शामिल है, कुछ गणना करें और परिणाम वापस करें। मैं अजगर 2.7 का उपयोग कर रहा multiprocessing.Poolपायथन मल्टीप्रोसेसिंग पूल बनाम मल्टीप्रोसेसिंग थ्रेडपूल

यहाँ मैं कैसे बना सकता हूँ कार्यकर्ता प्रक्रियाओं

def ProcessParallel(classifier,path): 
    files=glob.glob(path+"\*.png") 
    files_sorted=sorted(files,key=lambda file_name:int(file_name.split('--')[1])) 
    p = multiprocessing.Pool(processes=4,initializer=Initializer,initargs=(classifier,)) 
    data=p.map(LoadAndClassify, files_sorted) 
    return data 

मुद्दा मैं इसे का सामना करना पड़ रहा है कि जब मैं अपने Intializer समारोह में प्रारंभ समय प्रवेश करते है, मुझे पता है कि श्रमिक नहीं हैं 'आया है समानांतर में प्रारंभ टी, बल्कि प्रत्येक कार्यकर्ता 5 सेकंड के अंतराल के साथ आरंभ नहीं हो जाता, यहाँ संदर्भ

2016-08-08 12:38:32,043 - custom_logging - INFO - Worker started 
2016-08-08 12:38:37,647 - custom_logging - INFO - Worker started 
2016-08-08 12:38:43,187 - custom_logging - INFO - Worker started 
2016-08-08 12:38:48,634 - custom_logging - INFO - Worker started 

मैं कोशिश की multiprocessing.pool.ThreadPool बजाय का उपयोग कर दिया है जो एक ही समय में श्रमिक शुरू होता है के लिए लॉग नहीं है।
मुझे पता है कि विंडोज़ पर मल्टीप्रोसेसिंग कैसे काम करती है और हमें अपने कोड को अनंत प्रक्रियाओं से बचाने के लिए main guard रखना होगा। मेरे मामले में मुद्दा यह है कि मैंने फास्टसीजीआई का उपयोग करके आईआईएस पर अपनी स्क्रिप्ट होस्ट की है और मेरी स्क्रिप्ट मुख्य नहीं है, इसे फास्टसीजीआई प्रक्रिया द्वारा चलाया जा रहा है (इसके लिए एक wfastcgi.py स्क्रिप्ट है जो इसके लिए ज़िम्मेदार है)। अब wfastcgi.py के अंदर एक मुख्य गार्ड है और लॉग इंगित करते हैं कि मैं प्रक्रियाओं की अनंत संख्या नहीं बना रहा हूं।

अब मुझे पता है कि वास्तव में क्या पीछे बहु पूल कार्यकर्ता धागे एक साथ बनाने नहीं कारण है, मैं वास्तव में किसी भी मदद की सराहना करेंगे चाहते हैं।

संपादित करें 1: यहाँ मेरी प्रारंभकर्ता समारोह है

def Initializer(classifier): 
    global indexing_classifier 
    logger.info('Worker started') 
    indexing_classifier=classifier 
+0

'प्रारंभकर्ता' क्या करता है? –

+0

जब कोई कार्यकर्ता प्रारंभ होता है और प्रत्येक कार्यकर्ता को 'वर्गीकरण' नामक एक चर को पास करने के लिए बस – Ahmed

+0

@MuhammadTahir कृपया संपादित प्रश्न – Ahmed

उत्तर

0

मैं कई मुद्दों cgi/WSGI के तहत बहु भागने की कोशिश कर किया था, यह ठीक स्थानीय स्तर पर नहीं, बल्कि काम करता है असली वेबसर्वर पर ... अंत में यह सिर्फ isn संगत नहीं है। यदि आपको मल्टीप्रोसेसिंग करने की आवश्यकता है, तो सेलेरी जैसी किसी चीज़ को एसिंक नौकरियां भेजें।

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