2010-05-06 3 views
53

मुझे पता है कि इसका उत्तर पहले दिया गया है, लेकिन ऐसा लगता है कि सीधे "python filename.py" स्क्रिप्ट निष्पादित नहीं करता है। मेरे पास सुईएस लिनक्स पर पायथन 2.6.2 है।मल्टीप्रोसेसिंग त्रुटि के साथ अभी तक एक और भ्रम है, 'मॉड्यूल' ऑब्जेक्ट में कोई विशेषता नहीं है 'f'

कोड:

#!/usr/bin/python 
# -*- coding: utf-8 -*- 
from multiprocessing import Pool 
p = Pool(1) 
def f(x): 
    return x*x 
p.map(f, [1, 2, 3]) 

आदेश लाइन:

> python example.py 
Process PoolWorker-1: 
Traceback (most recent call last): 
File "/usr/lib/python2.6/multiprocessing/process.py", line 231, in _bootstrap 
    self.run() 
File "/usr/lib/python2.6/multiprocessing/process.py", line 88, in run 
    self._target(*self._args, **self._kwargs) 
File "/usr/lib/python2.6/multiprocessing/pool.py", line 57, in worker 
    task = get() 
File "/usr/lib/python2.6/multiprocessing/queues.py", line 339, in get 
    return recv() 
AttributeError: 'module' object has no attribute 'f' 
+1

[टर्मिनल में और Django या बोतल के लिए कोड moudles में पूल बहु अजगर का उपयोग करना] के संभावित डुप्लिकेट (http://stackoverflow.com/questions/18947876/using-python-multiprocessing-pool से समझाया गया है टर्मिनल-एंड-इन-कोड-माउडल्स-फॉर-डीजेंगो) –

+0

@jb। यह पोस्ट इस से काफी बाद में है, यह 2010 था, कि एक 2013 – gatoatigrado

+2

आयु अविश्वसनीय है मेटा पर सर्वसम्मति है कि बेहतर उत्तर के साथ प्रश्न चुना जाना चाहिए, और दूसरे के पास आईएमओ बेहतर जवाब है। –

उत्तर

98

अपने कोड को पुन: स्थापित करें ताकि f() फ़ंक्शन को पूल के उदाहरण बनाने से पहले परिभाषित किया गया हो। अन्यथा कार्यकर्ता आपका कार्य नहीं देख सकता है।

#!/usr/bin/python 
# -*- coding: utf-8 -*- 

from multiprocessing import Pool 

def f(x): 
    return x*x 

p = Pool(1) 
p.map(f, [1, 2, 3]) 
+3

कमाल, बहुत बहुत धन्यवाद !! क्या गुप्त उपयोग! – gatoatigrado

+1

नोट: कुछ साल बाद, मैंने एक इमेप विकल्प [https://github.com/gatoatigrado/vimap] लिखना शुरू कर दिया है, जो इस गलती को और अधिक कठिन बनाता है (और धागे को फोर्क किए जाने पर यह स्पष्ट करता है)। – gatoatigrado

+1

@ बार्टोस, क्या आपको कोई विचार है कि यह ipython नोटबुक में कोई समस्या क्यों नहीं है? – Framester

4

यह एक काम करता है:

#!/usr/bin/python 
# -*- coding: utf-8 -*- 
from multiprocessing import Pool 

def f(x): 
    return x*x 

if __name__ == "__main__": 
    p = Pool(1) 
    p.map(f, [1, 2, 3]) 

मैं 100% यकीन है कि क्यों अपने कोड काम नहीं करता नहीं हूँ, लेकिन मैं अनुमान लगाएं कि multiprocessing मॉड्यूल द्वारा लॉन्च की गई बाल प्रक्रियाएं मुख्य मॉड्यूल आयात करने की कोशिश करें (पहुंच के लिए आपके द्वारा परिभाषित विधियों), और if __name__ == "__main__" स्टांजा को प्रारंभिक कोड निष्पादित करने की आवश्यकता नहीं है जहां आपने अपना पूल सेट किया था।

+0

यदि किसी को विंडोज पर एक दुभाषिया के माध्यम से ऐसा कोड चलाने पड़ता है तो क्या कोई काम आसपास है? यह स्थिति है जहां मुझे गिंप पायथन कंसोल प्लगइन से कुछ पायथन-फू प्रोग्रामिंग करने का सामना करना पड़ रहा है। – jxramos

+0

यह मेरे लिए काम नहीं करता –

1

एक संभावना यह है कि आपके अजगर फ़ाइल एक मॉड्यूल के रूप में एक ही नाम है:

  • test.py
  • परीक्षा/
    • __init__.py

pickle.py में, आपके पास त्रुटि कॉमिन है जी से:

def find_class(self, module, name): 
     # Subclasses may override this 
     __import__(module) 
     mod = sys.modules[module] # <- here mod will reference your test/__init__.py 
     klass = getattr(mod, name) 
     return klass 
0
समस्या मैं के रूप में तमस द्वारा बताया if __name__ == "__main__" का उपयोग करके हल किया गया था था

; विंडोज के लिए ग्रहण में उदाहरण दुभाषिया के तहत काम नहीं करते हैं। यह http://docs.python.org/2/library/multiprocessing

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

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