Opracowałem narzędzie używające python/cython, które sortuje pliki CSV i generuje statystyki dla klienta, ale wywołanie pool.map wydaje się wywoływać wyjątek zanim moja zmapowana funkcja ma szansę wykonać . Sortowanie niewielkiej liczby plików wydaje się działać zgodnie z oczekiwaniami, ale ponieważ liczba plików rośnie do 10, otrzymuję poniższy IndexError po wywołaniu pool.map. Czy ktoś zdaje sobie sprawę z tego błędu poniżej? Każda pomoc jest bardzo doceniana.Python multiprocessing pool.map podnosi IndexError
Podczas gdy kod jest pod NDA, stosowanie, sprawa jest dość prosta:
Przykładowy kod:
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
wyjściowa:
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
traceback pokażesz zawiera inną varia ble nazwa ('sorted_dict') niż ta w kodzie przykładowym (' wyniki'), która sugeruje, że nie publikujesz aktualnego kodu, który działa i generuje błąd. – BrenBarn
Typo z mojej strony - zmienna wyników pochodziła z bardzo podobnej funkcji, która oblicza statystyki. Naprawiłem literówkę. – Cryo