split() Funktion re-implementieren, dass sie iterable ist.

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.
Benutzeravatar
akis.kapo
User
Beiträge: 127
Registriert: Freitag 1. September 2006, 12:58

Beitragvon akis.kapo » Mittwoch 20. Februar 2008, 14:33

OK, AB JETZT KÖNNT IHR LÖSUNGEN POSTEN!!!
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Mittwoch 20. Februar 2008, 14:34

akis.kapo hat geschrieben:Allerdings ist mir nicht 100%ig klar, wie ich das mache,
dass es per mystring.iter_split(foo, bar) geht, statt als iter_split(string, ...).

Gar nicht - das ist unterbunden worden (vom BDFL), es ist in Python nicht vorgesehen dass man eingebaute Typen erweitern kann. Was du machen kannst, ist einen neuen Typ zu erstellen und von den eingebauten Typen zu erben.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
akis.kapo
User
Beiträge: 127
Registriert: Freitag 1. September 2006, 12:58

Beitragvon akis.kapo » Mittwoch 20. Februar 2008, 14:49

Leonidas hat geschrieben:Gar nicht - das ist unterbunden worden (vom BDFL), es ist in Python nicht vorgesehen dass man eingebaute Typen erweitern kann. Was du machen kannst, ist einen neuen Typ zu erstellen und von den eingebauten Typen zu erben.


Hmm, das habe ich mir nämlich fast schon gedacht.
Aber aus einem ganz anderem Grund:

Das mmap() Zeugs kann man ja nicht innerhalb der iter_strip() Funktion einbinden,
weil die ja auf einem fertigem String arbeitet (ob als Parameter übergeben oder auf Objekt angewandt, das sei mal hingestellt.).
Das bedeutet auch, dass das "neue" Objekt, dass von string erben soll, irgendwie ne classenmethode oder sonst einen Weg hat,
versteckt vom iter_split() irgendwas zu mmappen, oder sonstwas, welches blockweises lesen ermöglicht.

@BJ
Dann würde ich aber die manuelle Blockweise-Lesen Lösung bevorzugen,
weil mir gehts ja um Speicherersparnis bei riesigen Dateien.
Mmap, so wie ich das verstanden habe, speichert ja alles Doppelt.
Sprich, das Delta im Arbeitsspeicher (ist mutable und kann sich vom Dateiinhalt unterscheiden, solange man nicht closed oder flushed)
und dann noch das nicht unterbindbare Filecache vom OS, welches
das gelesene File cached (unverändert, bzw. halt so, wies gelesen wird.).

Oder nicht, oder was meint ihr?

EDIT:

Ist der nicht unterbindbare Filecache vom OS eigentlich wirklich so ununterbindbar?
Ich weiss von diversen Datenbanksystemen, dass sie für ihre SMS das OS Filecaching "deaktivieren"
(durch nen bestimmten open() Parameter, der das caching unterbindet?).
IBMs AIX soll das können. Die Frage ist kanns jedes Unix/Linux? (Oder gar Windows)
Und wenn ja, wo gibts diese Option in python? (ich seh da nix unter open oder file)
BlackJack

Beitragvon BlackJack » Mittwoch 20. Februar 2008, 15:11

Ich verstehe Deine Bedenken bezüglich `mmap` nicht ganz. Du veränderst die Zeichenkette in `iter_split()` ja nicht, also muss `mmap` sich da auch keine Veränderungen im Speicher merken. Da wird nichts doppelt gespeichert, ausser die Kopien, die Du heraus "sliced", aber das hast Du bei jeder anderen Lösung auch. `mmap` dürfte wesentlich effizienter sein, als manuelles blockweises Lesen, das ist schliesslich *der* Mechanismus auf dem in der Regel die ganze virtuelle Speicherverwaltung vom Betriebssystem aufbaut.

Ebenfalls Edit: Wieso willst Du den Block-Cache unterbinden? Sowie dort Platz gebraucht wird, fliegen die Blöcke von dem `mmap` halt raus. Stört doch nicht weiter. Sofern sie dort überhaupt landen ─ wäre eigentlich unsinnig.

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot]