मैं प्रोसेस क्लास को उप-वर्गीकृत कर रहा हूं, जिसे मैं कक्षा श्रेणी में एज एजेंडरर कहता हूं। मैं नियमित प्रक्रियाओं के बजाय multiprocessing.Pool
का उपयोग करना चाहता हूं, मैं चाहता हूं कि वे मेरे एजेंडरर के उदाहरण हों। मुमकिन? कैसे?पायथन मल्टीप्रोसेसिंग: कस्टम प्रक्रियाओं का पूल
उत्तर
: वैकल्पिक रूप से, आप प्रतिदेय वस्तु में कार्यक्षमता हैं जिन्हें आप मानचित्रण के लिए उपयोग का निर्माण कर सकते
यह वर्तमान में एपीआई में समर्थित नहीं है, लेकिन एक बुरी नहीं होगा इसके अलावा। मैं/2.6.3 3.1 इस सप्ताह python2.7 में जोड़ने को देखेंगे
मुझे एपीआई में इसके लिए कोई हुक नहीं दिख रहा है। आप 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)
आप कक्षा को 'p.map' के तर्क के रूप में पास नहीं कर सकते हैं, आपको अचार त्रुटि मिल जाएगी। इस बारे में मैंने पाया है कि एकमात्र तरीका कस्टम 'pool.map' को लागू करना है .... प्रक्रियाओं को स्वयं स्थापित करना और खिलााना। दुर्भाग्य से यह और अधिक लाइनें लेने वाला है। – catwalker333
यह काम करने के लिए लगता है:
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)
आप इस तरह से बहु सूत्रण उपयोग करने के लिए अपने कोड लिखने की कोशिश कर रहे हैं ? –
मल्टी प्रोसेसिंग। –