python - Multiprocessing: How to use Pool.map on a function defined in a class? -


जब मैं कुछ ऐसा चलाता हूँ:

  multiprocessing आयात से पूल p = पूल (5) Def f (x): वापसी x * x p.map (f, [1,2,3])  

यह ठीक काम करता है हालांकि, इसे एक वर्ग के फ़ंक्शन के रूप में लगाया जा रहा है:

  वर्ग गणना (ऑब्जेक्ट): def रन (स्वयं): def f (x): return x * xp = Pool () return p। नक्शा (एफ, [1,2,3]) सीएल = गणना () प्रिंट cl.run ()  

मुझे निम्न त्रुटि देता है:

  अपवाद में थ्रेड ) फ़ाइल "/sw/lib/python2.6/threading.py", पंक्ति 484, चलाने के लिए स्वयं .__ लक्ष्य (* आत्म .__ आर्ग्स, ** स्वयं .__ kwargs) फ़ाइल "/sw/lib/python2.6/multiprocessing/ Pool.py ", पंक्ति 225, _handle_tasks में डाल (कार्य) पिकलिंग त्रुटि: लिखित नहीं कर सकते; टाइप करें 'फ़ंक्शन' & gt ;: विशेषता लुकअप __builtin __। फ़ंक्शन विफल  

मैंने देखा है एलेक्स मार्टले ने एक ही तरह की समस्या से निपटने के लिए एक पोस्ट, लेकिन यह काफी स्पष्ट नहीं था।

मैं भी फिर से नाराज था किस तरह के फ़ंक्शंस पूल.मैप स्वीकार कर सकता है मैंने इस बात को खारिज करने के लिए निम्नलिखित लिखा था। यह प्रतीत होता है, परमाप के पुनरावर्ती उपयोग के लिए भी काम करता है।

  आयात प्रक्रिया से, आईटेरटोल्स से पाइप आयात izip def spawn (f): def मजेदार (पाइप, एक्स): पाइप.send ( (एक्स) में एक्स के लिए पाइप = [पाइप ()] proc = [प्रक्रिया (लक्ष्य = spawn (f), आर्ग्स = (सी, एक्स) एफ (एक्स)) पाइप। ) पी के लिए पी (पी, सी) के लिए पी (पी, पी) के लिए एक्स [पी] (पी, पी) के लिए पी [पी। सी) पाइप में] यदि __name__ == '__main__': प्रिंट परमाप (लैम्ब्डा x: x ** x, श्रेणी (1,5))  

Comments