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"?
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
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ę. –
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