Python-Multiprozessing, das sicher in eine Datei schreibt
Ich versuche mich zu lösen, eine große numerische problem, die umfasst eine Vielzahl von Teilproblemen, und ich bin mit Python-multiprocessing-Modul (speziell Pool.Karte) zum aufteilen von verschiedenen unabhängigen Teilprobleme auf verschiedenen Kernen. Jedes subproblem computing umfasst viele sub-Teilproblemen, und ich bin versucht zu effektiv memoize diese Ergebnisse durch Speicherung in einer Datei wenn Sie nicht nochmals berechnet, indem jeder Prozess noch, sonst überspringen Sie die Berechnung und Lesen Sie die Ergebnisse aus der Datei.
Bin ich mit concurrency-Probleme mit den Dateien: verschiedene Prozesse, manchmal zu überprüfen, um zu sehen, wenn ein sub-subproblem wurde berechnet, noch (durch die Suche nach der Datei, wo die Resultate gespeichert werden würde), sehen, dass es nicht, ausführen der Berechnung, dann versuchen Sie, schreiben Sie die Ergebnisse in die gleiche Datei zur gleichen Zeit. Wie kann ich vermeiden, schreiben Kollisionen wie diese?
InformationsquelleAutor der Frage Big Dogg | 2012-11-19
Du musst angemeldet sein, um einen Kommentar abzugeben.
@GP89 erwähnt eine gute Lösung. Benutzen Sie eine Warteschlange zu senden, die das schreiben von Aufgaben in einem engagierten Prozess ist, der alleinigen Schreibzugriff auf die Datei. Alle anderen Arbeitnehmer haben nur-Lesen-Zugriff. Dadurch wird verhindert Kollisionen. Hier ist ein Beispiel, apply_async, aber es wird funktionieren mit der Karte:
InformationsquelleAutor der Antwort MikeHunter
Sieht es für mich aus, dass Sie verwenden müssen Manager vorübergehend speichern Sie Ihre Ergebnisse in eine Liste und schreiben Sie dann die Ergebnisse aus der Liste in eine Datei. Nutzen Sie auch Sternenkarte zu übergeben Sie das Objekt, das Sie Bearbeiten möchten, und die verwalteten Liste. Der erste Schritt ist das erstellen der parameter übergeben werden, die Sternenkarte, die auch die verwalteten Liste.
Ab diesem Zeitpunkt müssen Sie entscheiden, wie Sie gehen, um mit der Liste arbeiten. Wenn Sie Tonnen von RAM, und eine riesige Daten-set fühlen Sie sich frei verketten mit pandas. Dann können Sie speichern Sie die Datei ganz einfach als csv-oder eine Gurke.
InformationsquelleAutor der Antwort fizix137