2012-12-21 20 views
5

बढ़ाता है मैंने पाइथन/साइथन का उपयोग करके एक उपयोगिता विकसित की है जो सीएसवी फाइलों को टाइप करता है और क्लाइंट के लिए आंकड़े उत्पन्न करता है, लेकिन पूल मैप का आविष्कार करना मेरे मैप किए गए फ़ंक्शन को निष्पादित करने का मौका देने से पहले अपवाद उठाना प्रतीत होता है । फ़ाइलों की एक छोटी संख्या को सॉर्ट करने की अपेक्षा की जाती है, लेकिन फाइलों की संख्या 10 कहने के लिए बढ़ती है, इसलिए पूल.मैप को कॉल करने के बाद मुझे नीचे इंडेक्स त्रुटि मिलती है। क्या कोई नीचे दी गई त्रुटि को पहचानता है? कोई भी मदद बहुत ही सराहनीय होगी।पायथन मल्टीप्रोसेसिंग पूल.मैप इंडेक्स एरर

कोड NDA के अंतर्गत है, यूज-केस काफी सरल है:

कोड नमूना:

def sort_files(csv_files): 
    pool_size = multiprocessing.cpu_count() 
    pool = multiprocessing.Pool(processes=pool_size) 
    sorted_dicts = pool.map(sort_file, csv_files, 1) 
    return sorted_dicts 

def sort_file(csv_file): 
    print 'sorting %s...' % csv_file 
    # sort code 

आउटपुट:

File "generic.pyx", line 17, in generic.sort_files (/users/cyounker/.pyxbld/temp.linux-x86_64-2.7/pyrex/generic.c:1723) 
    sorted_dicts = pool.map(sort_file, csv_files, 1) 
    File "/usr/lib64/python2.7/multiprocessing/pool.py", line 227, in map 
    return self.map_async(func, iterable, chunksize).get() 
    File "/usr/lib64/python2.7/multiprocessing/pool.py", line 528, in get 
    raise self._value 
IndexError: list index out of range 
+0

देख ट्रैस बैक आपको बताएंगे कि एक अलग varia शामिल आपके कोड नमूने ('परिणाम') में से एक की तुलना में ब्ली नाम ('sorted_dict'), जो बताता है कि आप वास्तविक कोड पोस्ट नहीं कर रहे हैं जो त्रुटि को चलाता है और उत्पन्न करता है। – BrenBarn

+0

मेरे भाग पर टाइपो - परिणाम चर एक बहुत ही समान कार्य से था जो आंकड़ों की गणना करता है। मैंने टाइपो तय कर दिया है। – Cryo

उत्तर

14

IndexError एक है त्रुटि आप sort_file(), यानी एक subprocess में कहीं कहीं मिलता है। यह मूल प्रक्रिया द्वारा फिर से उठाया जाता है। स्पष्ट रूप से multiprocessing हमें यह सूचित करने का कोई प्रयास नहीं करता है कि वास्तव में त्रुटि कहां से आती है (उदा। किस लाइन पर यह हुआ) या यहां तक ​​कि सिर्फ sort_file() के लिए क्या तर्क है। मैं आगे भी :-(अधिक

+0

सही! मैंने पाया कि मेरी सीएसवी फाइलों में से एक कॉलम गायब था। निगाह डालने के लिए धन्यवाद! – Cryo

0

चेक multiprocessing नफरत आदेश में उत्पादन अजगर 3.4 में कम से कम, multiprocessing.pool काम आते हुए एक RemoteTraceback माता पिता प्रक्रिया ट्रैस बैक ऊपर प्रिंट होगा आप की तरह कुछ दिखाई देगा:।।

multiprocessing.pool.RemoteTraceback: 
""" 
Traceback (most recent call last): 
    File "/usr/lib/python3.4/multiprocessing/pool.py", line 119, in worker 
    result = (True, func(*args, **kwds)) 
    File "/usr/lib/python3.4/multiprocessing/pool.py", line 44, in mapstar 
    return list(map(*args)) 
    File "/path/to/your/code/here.py", line 80, in sort_file 
    something = row[index] 
IndexError: list index out of range 
""" 

The above exception was the direct cause of the following exception: 

Traceback (most recent call last): 
    File "generic.pyx", line 17, in generic.sort_files (/users/cyounker/.pyxbld/temp.linux-x86_64-2.7/pyrex/generic.c:1723) 
    sorted_dicts = pool.map(sort_file, csv_files, 1) 
    File "/usr/lib64/python2.7/multiprocessing/pool.py", line 227, in map 
    return self.map_async(func, iterable, chunksize).get() 
    File "/usr/lib64/python2.7/multiprocessing/pool.py", line 528, in get 
    raise self._value 
IndexError: list index out of range 

ऊपर मामले में, कोड त्रुटि को ऊपर उठाने है पर /path/to/your/code/here.py", line 80

भी debugging errors in python multiprocessing

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