2009-04-11 17 views
5

मैं प्रोसेस क्लास को उप-वर्गीकृत कर रहा हूं, जिसे मैं कक्षा श्रेणी में एज एजेंडरर कहता हूं। मैं नियमित प्रक्रियाओं के बजाय multiprocessing.Pool का उपयोग करना चाहता हूं, मैं चाहता हूं कि वे मेरे एजेंडरर के उदाहरण हों। मुमकिन? कैसे?पायथन मल्टीप्रोसेसिंग: कस्टम प्रक्रियाओं का पूल

+0

आप इस तरह से बहु सूत्रण उपयोग करने के लिए अपने कोड लिखने की कोशिश कर रहे हैं ? –

+0

मल्टी प्रोसेसिंग। –

उत्तर

3

: वैकल्पिक रूप से, आप प्रतिदेय वस्तु में कार्यक्षमता हैं जिन्हें आप मानचित्रण के लिए उपयोग का निर्माण कर सकते

यह वर्तमान में एपीआई में समर्थित नहीं है, लेकिन एक बुरी नहीं होगा इसके अलावा। मैं/2.6.3 3.1 इस सप्ताह python2.7 में जोड़ने को देखेंगे

2

मुझे एपीआई में इसके लिए कोई हुक नहीं दिख रहा है। आप initializer और initargs तर्क का उपयोग कर अपनी वांछित कार्यक्षमता को दोहराने में सक्षम हो सकते हैं। जेसी Noller से

class EdgeRenderTask(object): 
    def op1(self,*args): 
     ... 
    def op2(self,*args): 
     ... 
p = Pool(processes = 10) 
e = EdgeRenderTask() 
p.apply_async(e.op1,arg_list) 
p.map(e.op2,arg_list) 
+0

आप कक्षा को 'p.map' के तर्क के रूप में पास नहीं कर सकते हैं, आपको अचार त्रुटि मिल जाएगी। इस बारे में मैंने पाया है कि एकमात्र तरीका कस्टम 'pool.map' को लागू करना है .... प्रक्रियाओं को स्वयं स्थापित करना और खिलााना। दुर्भाग्य से यह और अधिक लाइनें लेने वाला है। – catwalker333

2

यह काम करने के लिए लगता है:

import multiprocessing as mp 

ctx = mp.get_context() # get the default context 

class MyProcess(ctx.Process): 
    def __init__(self, *args, **kwargs): 
     super().__init__(*args, **kwargs) 
     print("Hi, I'm custom a process") 

ctx.Process = MyProcess # override the context's Process 

def worker(x): 
    print(x**2) 

p = ctx.Pool(4) 
nums = range(10) 
p.map(worker, nums) 
संबंधित मुद्दे