2013-02-11 64 views
8

मैं पाइथन मल्टीप्रोसेसिंग मॉड्यूल के साथ पकड़ने की कोशिश कर रहा हूं, विशेष रूप से Pool की apply_async विधि। मैं तर्क और कीवर्ड तर्क के साथ एक समारोह को कॉल करने की कोशिश कर रहा हूँ। अगर मैं kwargs बिना फ़ंक्शन को कॉल यह ठीक है, लेकिन जब मैं एक कीवर्ड बहस में जोड़ने की कोशिश मैं: TypeError: apply_async() got an unexpected keyword argument 'arg2' नीचे कैसे मैं इतना है कि समारोह कॉल कर सकते हैं परीक्षण कोड है कि मैंमैं पाइथन मल्टीप्रोसेसिंग पूल के साथ कुंजी शब्द तर्कों का उपयोग कैसे करूं? Apply_async

#!/usr/bin/env python 
import multiprocessing 
from time import sleep 
def test(arg1, arg2=1, arg3=2): 
    sleep(5) 

if __name__ == '__main__': 
    pool = multiprocessing.Pool() 
    for t in range(1000): 
     pool.apply_async(test, t, arg2=5) 
    pool.close() 
    pool.join() 

चल रहा हूँ है यह कीवर्ड तर्क स्वीकार करता है?

उत्तर

14

एक शब्दकोश में कीवर्ड आर्ग (और एक टपल में स्थितीय तर्क) दर्रा:

pool.apply_async(test, (t,), dict(arg2=5)) 
+0

कि धन्यवाद काम बुला! – cts

1

Janne का जवाब अजगर 2.7.11 में मेरे लिए काम नहीं किया (यकीन नहीं क्यों)। फ़ंक्शन टेस्ट() कुंजी (arg2) प्राप्त कर रहा था, मान (5) नहीं।

मैं परीक्षण के चारों ओर एक आवरण बनाने के द्वारा इस तय:

def test2(argsDict): 
    test(**argsDict) 

फिर

pool.apply_async(test2, (t,), [dict(arg2=5)]) 
+0

बात यह है कि, यदि यह एक रैपर है, तो हमें कीवर्ड तर्कों की आवश्यकता नहीं है :) मैं भी कुंजी प्राप्त करने के परीक्षण की समस्या की पुष्टि करता हूं –