csv file mit mehreren threads einlesen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
bcit6k
User
Beiträge: 77
Registriert: Mittwoch 23. Juli 2008, 08:50

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!
Benutzeravatar
/me
User
Beiträge: 3554
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

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 ...
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.
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Selbst wenn es ginge, die Festplatte hat trotzdem nur einen Lesekopf.
Offizielles Python-Tutorial (Deutsche Version)

Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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! :D
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
amiganer68
User
Beiträge: 18
Registriert: Mittwoch 1. Juli 2009, 14:20

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
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

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
bcit6k
User
Beiträge: 77
Registriert: Mittwoch 23. Juli 2008, 08:50

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!!
amiganer68
User
Beiträge: 18
Registriert: Mittwoch 1. Juli 2009, 14:20

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
Antworten