Ich versuche, ein Programm zu erstellen, das einen Prozess-Pool von, sagen wir, 5 Prozessen startet, einige Operationen durchführt und dann beendet, aber die 5 Prozesse offen lässt. Später kann der Benutzer das Programm erneut starten, und anstatt neue Prozesse zu starten, verwendet es die vorhandenen 5. Im Grunde handelt es sich um ein Erzeuger-Verbraucher-Modell, bei dem:
- Die Zahl der Erzeuger ist unterschiedlich.
- Die Zahl der Verbraucher ist konstant.
- Die Produzenten können zu verschiedenen Zeiten von verschiedenen Programmen oder sogar verschiedenen Benutzern gestartet werden.
Ich verwende das eingebaute multiprocessing
Modul, derzeit in Python 2.6.4., aber mit der Absicht, auf 3.1.1 zu bewegen schließlich.
Hier ist ein grundlegendes Anwendungsszenario:
- Ausgangszustand - keine laufenden Prozesse.
- Benutzer startet
program.py operation
- ein Produzent, fünf laufende Konsumenten. - Operation abgeschlossen - fünf Verbraucher laufen.
- Benutzer startet
program.py operation
- ein Produzent, fünf laufende Konsumenten. - Benutzer startet
program.py operation
- zwei Produzenten, fünf Konsumenten laufen. - Der Vorgang ist abgeschlossen - ein Produzent, fünf Konsumenten laufen.
- Operation abgeschlossen - fünf Verbraucher laufen.
- Benutzer startet
program.py stop
und es wird abgeschlossen - keine Prozesse laufen. - Benutzer startet
program.py start
und es wird fertig - fünf Verbraucher laufen. - Benutzer startet
program.py operation
- ein Zuhälter, fünf laufende Verbraucher. - Operation abgeschlossen - fünf Verbraucher laufen.
- Benutzer startet
program.py stop
und es wird abgeschlossen - keine Prozesse laufen.
Das Problem, das ich habe, ist, dass ich nicht weiß, womit ich anfangen soll:
- Erkennen, dass die Verbraucherprozesse laufen.
- Zugang zu ihnen über ein zuvor nicht verwandtes Programm.
- Plattformübergreifende Durchführung von 1 und 2.
Sobald ich das kann, weiß ich, wie ich die Prozesse steuern kann. Es muss eine zuverlässige Möglichkeit geben, bestehende Prozesse zu erkennen, da ich gesehen habe, dass Firefox dies tut, um zu verhindern, dass mehrere Instanzen von Firefox ausgeführt werden, aber ich habe keine Ahnung, wie man das in Python macht.