2013-07-26 6 views
6

Spędziłem tydzień przetwarzając niektóre gnarly pliki tekstowe - niektóre w zakresie rzędu stu milionów wierszy.granice Pythona w przetwarzaniu plików równoległych

Użyłem Pythona do otwierania, analizowania, przekształcania i wyprowadzania tych plików. Pracowałem równolegle, często 6 -8 na raz, na ogromnej, 8-procesorowej, 16-rdzeniowej jednostce EC2, używając SSD.

I chciałbym powiedzieć, że wyjście jest złe na 0,001% z zapisów, jak:

Expected output: |1107|2013-01-01 00:00:00|PS|Johnson|etc. 

Actual output: |11072013-01-01 00:00:00|PS|Johnson|etc. 
       or |1107|2013-01-01 :00:00|PS|Johnson 

prawie zawsze, problemem nie jest GIGO, ale raczej, że Python nie udało się napisać separatora lub części pole daty. Zakładam więc, że przeciążam dysk SSD tymi zadaniami, a raczej, że komputer nie jest w stanie dławić pythona w oparciu o rywalizację zapisu na dysku.

Moje pytanie brzmi: jak uzyskać najszybsze przetwarzanie z tego pola, ale nie wywołać tego typu "zapisu"?

+0

Czy te błędy zapisu nie wynikają z twojego sposobu robienia rzeczy? Jest mało prawdopodobne, że dysk SSD jest przeciążony. Czy piszesz na tym samym pliku z różnych procesów/wątków? – Xaqq

+0

Proszę opracować "swój sposób robienia rzeczy" - moim sposobem jest zapisywanie plików za pomocą csv.writer z ogranicznikiem potoku. Dysk SSD przetwarza zapisy 50 KB na sekundę. –

+2

Co miałem na myśli, czy piszesz jednocześnie do tego samego pliku? Bo jeśli tak, to prawdopodobnie będzie to przyczyną twojego problemu. – Xaqq

Odpowiedz

1

Czy używasz modułu multiprocessing (oddzielne procesy) lub po prostu używasz wątków do przetwarzania równoległego?

Wątpię, aby dysk SSD był problemem. Lub python. Ale może moduł csv ma stan wyścigowy i nie jest bezpieczny dla wątków?

Sprawdź również kod. I dane wejściowe. Czy "złe" zapisy są spójne? Czy możesz je odtworzyć? Wspomniałeś GIGO, ale tak naprawdę nie wykluczaj tego ("Prawie zawsze, ...").

+0

nie używając modułu wieloprocesorowego - zbada, dzięki. Po prostu chcę wykluczyć pewne rzeczy, więc zarówno ja, jak i ja "wątpimy", że dysk SSD może być problemem, ale szukam tutaj twojego doświadczenia - czy rywalizacja o urządzenia wstrzyma przetwarzanie urządzenia blokowego? będzie pisać w kolejce? pod dużym obciążeniem, czy znaki nie zostaną zapisane? Pisarz CSV jest podejrzany, ponieważ jest szansa, że ​​w pliku zatrzymano normalne przetwarzanie. Kiedy rozsądnie rządzę wszystkim innym, GIGO musi być konkluzją. –

+2

Jeśli urządzenie nie może nadążyć, "blokowanie" zostanie zablokowane. Więc znaki nie zostaną zapisane, będzie tylko czekać, aż dysk będzie wolny i będzie pisać. – Xaqq

+0

Zaleta korzystania z modułu 'csv' jest umiarkowanie niska, więc prawdopodobnie zastąpiłbym go samodzielnie napisanym kodem, który zapewni bezpieczeństwo wątków. Prawdopodobnie wtedy problem zniknął. Następnym zadaniem będzie znalezienie przyczyny w "csv", naprawienie błędu i przywrócenie poprawce społeczności ;-) – Alfe

Powiązane problemy