Seite 1 von 1
csv file mit mehreren threads einlesen
Verfasst: Donnerstag 10. September 2009, 16:01
von bcit6k
Hallo,
ich möchte gerne ein csv file mit 4 threads gleichzeitig einlesen. so das jeder thread 15% einliest. ich kenn zwar ide normale csv read funktion und die funktioniert auch super, aber wie kann man da die start und endrow definieren?
oder gibt es hierzu eine bessere möglichkeit?
danke!
Re: csv file mit mehreren threads einlesen
Verfasst: Donnerstag 10. September 2009, 17:38
von /me
bcit6k hat geschrieben:ich möchte gerne ein csv file mit 4 threads gleichzeitig einlesen. so das jeder thread 15% einliest. ich kenn zwar ide normale csv read funktion und die funktioniert auch super, aber wie kann man da die start und endrow definieren?
oder gibt es hierzu eine bessere möglichkeit?
Nun ja, die Frage ist, was du damit erreichen möchtest. Schneller wird es durch Multithreading sicher nicht werden.
BTW, bei 4 * 15% fehlt dir hinterher was ...
Verfasst: Donnerstag 10. September 2009, 17:39
von BlackJack
@bcit6k: Das geht nicht, weil man nicht mitten drin anfangen kann mit dem Lesen, da man ja nicht weiss, wo die Zeilen beginnen, ohne die Datei von vorne bis zur gewünschten Zeile zu lesen.
Verfasst: Donnerstag 10. September 2009, 20:03
von Rebecca
Selbst wenn es ginge, die Festplatte hat trotzdem nur einen Lesekopf.
Verfasst: Donnerstag 10. September 2009, 20:49
von Leonidas
Rebecca hat geschrieben:Selbst wenn es ginge, die Festplatte hat trotzdem nur einen Lesekopf.
Vielleicht liegt die Datei ja auf einem RAID, für maximale Performance!

Re: csv file mit mehreren threads einlesen
Verfasst: Freitag 11. September 2009, 06:49
von amiganer68
bcit6k hat geschrieben:Hallo,
ich möchte gerne ein csv file mit 4 threads gleichzeitig einlesen. so das jeder thread 15% einliest. ich kenn zwar ide normale csv read funktion und die funktioniert auch super, aber wie kann man da die start und endrow definieren?
oder gibt es hierzu eine bessere möglichkeit?
danke!
So würde ich sagen geht das nicht, wegen den schon erwähnten Problemen meiner Vorredner.
ABER so könnte es gehen:
1. EineHauptroutine öffnet den File
2. Liest eine Zeile ein und übergibt die Verarbeitung an einen Thread
3. Wiederhole 2. bis MAX-Thread's beschäftigt
4. Warte bis 1x Thread fertig und gehe zu 2.
Es ist auch möglich hier gleich 2-3 Zeilen zu lesen, damit der Thread was zu tun hat.....
MfG
Christian
Verfasst: Freitag 11. September 2009, 08:20
von CM
Hoi,
@amiganer68: Das ist doch tierisch aufwendig, oder? In der Regel ist die Aufbereitung des Inhalts fixer als das eigentliche Lesen des Files - selbst wenn es sehr groß ist. Also Threading oder MPI kommt doch erst in Frage, wenn die Daten - in welcher Form auch immer - im Speicher sind: Das eigentliche Rechnen bezieht sich nur in seltenen Fällen auf die einzelnen Zeilen. Vielleicht können einzelne Threads bei großen Datenmengen noch temporäre Files verwalten - aber die sind dann auch spezifisch für jeden Thread.
Also das effizienteste Tool für diese Art von Daten in der Pythonwelt ist IMHO ohnehin
PyTables. Den Autor, Francesc, mal eben so überbieten ist sicher eine Herausforderung ...
Gruß,
Christian
Verfasst: Freitag 11. September 2009, 09:15
von bcit6k
Hallo,
danke für eure Hinweise. Ich dachte es gibt vieleicht die Möglichkeit aber macht nix dan lese ich das ganze file eben ein.
danke!!
Verfasst: Freitag 11. September 2009, 10:33
von amiganer68
CM hat geschrieben:Hoi,
@amiganer68: Das ist doch tierisch aufwendig, oder? In der Regel ist die Aufbereitung des Inhalts fixer als das eigentliche Lesen des Files - selbst wenn es sehr groß ist. Also Threading oder MPI kommt doch erst in Frage, wenn die Daten - in welcher Form auch immer - im Speicher sind: Das eigentliche Rechnen bezieht sich nur in seltenen Fällen auf die einzelnen Zeilen. Vielleicht können einzelne Threads bei großen Datenmengen noch temporäre Files verwalten - aber die sind dann auch spezifisch für jeden Thread.
Das ist aufwendig, stimmt. Doch kennen wir ja den eigentlichen Hintergrund nicht. Wenn es nur darum geht, die Daten in eine Datenbank zu schreiben, ist der Aufwand mit den Threads sicherlich zuviel, dann ist einfach ein Programm, einlesen und schreiben in DB einfacher.
Doch wollte ich dem Frager eine Möglichkeit geben, wie es denn doch gehen könnte, hier ist der Gedanke an einen Master-Thread sicherlich nicht verkehrt und die Festplatte dürfte noch immer langsamer sein als der Computer, so dass er die Daten schon im Hintergrund aufarbeiten kann. Wir wissen allerdings auch nicht, wie aufwendig das ist...
CM hat geschrieben:Also das effizienteste Tool für diese Art von Daten in der Pythonwelt ist IMHO ohnehin
PyTables. Den Autor, Francesc, mal eben so überbieten ist sicher eine Herausforderung ...

Da sollte man doch mal vorbei schauen...
MfG
Christian