Ich arbeite nur mit einer txt-Datei, die etwa 4 MB groß ist, und die Datei benötigt häufig E/A, wie z. B. neue Zeilen anhängen/nach bestimmten Zeilen suchen, die bestimmte Ausdrücke enthalten/eine bestimmte Zeile durch eine andere ersetzen usw.
Um die Datei "gleichzeitig" zu bearbeiten, threading.RLock()
wird verwendet, um die Ressource zu sperren, wenn sie in Betrieb ist. Da es sich nicht um eine große Datei handelt, verwende ich einfach readlines()
um sie alle in eine Liste einzulesen und den Suchauftrag zu erfüllen, und auch mit read()
um die gesamte Datei in eine Zeichenkette einzulesen FileContent
und verwenden FileContent.replace("demo", "test")
um bestimmte Begriffe durch beliebige Begriffe zu ersetzen.
Aber das Problem ist, ich bin gelegentlich mit "MemoryError", ich meine manchmal alle 3 oder 4 Tage, manchmal länger wie eine Woche oder so. Ich habe meinen Code sorgfältig überprüft und es gibt kein ungeschlossenes Dateiobjekt, wenn jeder Thread endet. Was die Datei-Operation betrifft, verwende ich einfach:
CurrentFile = open("TestFile.txt", "r")
FileContent = CurrentFile.read()
CurrentFile.close()
Ich denke, vielleicht Python ist nicht löschen nutzlose Variablen so schnell wie ich erwartet, die schließlich Ergebnis in aus dem Speicher, so dass ich erwäge, zu verwenden with
Anweisung, die beim Garbage Collecting schnell sein kann. Ich habe keine Erfahrung mit solchen Anweisungen, weiß jemand, ob dies helfen würde? Oder gibt es eine bessere Lösung für mein Problem?
Herzlichen Dank.
Hinzugefügt: Mein Skript würde viele Ersetzungen in kurzer Zeit durchführen, so dass ich vermute, dass vielleicht Hunderte von Threads, die FileContent = CurrentFile.read() verwenden, zu Speichermangel führen würden, wenn FileContent nicht schnell gelöscht wird? Wie kann ich ein solches Problem beheben?