Probleme mit multiprocessing-Modul unter Windows
Verfasst: Sonntag 25. April 2010, 09:49
Hallo,
ich habe ein Problem mit dem Modul [mod]multiprocessing[/mod]. Allerdings tritt dieses nur unter Windows auf, unter Linux funktioniert mein Code problemlos.
Ich beschreibe nun kurz was ich mache, vielleicht findet sich darin schon der eine oder andere Fehler.
In der Init Funktion der PyQt-Fensterklasse (QMainWindow), in welcher die Oberfläche erstellt wird, starte ich auch die anderen Prozesse bzw. koordiniere sie.
Dort mache ich erstmal folgendes:
Ich erstelle eine Manager-Klasse, welche das pickeln erledigen sollte, und verwende die von dort aus erstellte Queue zur Kommunikation zwischen den zwei Arbeitsprozessen. Danach werden die Prozesse erstellt, denen ich die Queue übergebe.
SnifferProcess liest nun vom Netzwerk Daten ein, verarbeitet sie und gibt sie anschließend in die Queue. DataProcess holt sie sich aus der Queue und fügt sie dann in eine Datenbank ein.
Der Code des Prozesses sieht folgendermaßen aus:
Der Sniffer-Prozess sieht von der Struktur her ähnlich aus, liest periodisch Daten aus dem Netzwerk aus und fügt diese dann mit in die Queue, welche dann vom DataProcess (siehe oben) abgeholt werden kann.
Um das Problem zu verstehen poste ich noch kurz meine Haupt-Pythondatei:
Unter Linux funktioniert alles perfekt, doch unter Windows wird nach Starten der Applikation die Qt- und die PyQt-Version unendlich oft hintereinander ausgegeben und die eigentliche Oberfläche wird gar nicht erst erstellt. Für mich macht dies keinen Sinn, es kommt ja nur am Anfang des Hauptprogramms vor und alles was mit multiprocessing zu tun hat, kommt erst an späterer Stelle ins Spiel.
Vielleicht findet jemand eine Problemstelle oder hat gar so eine Situation schon mal erlebt.
Die Windows-Version unter der ich diese Software getestet habe, war übrigens Windows7 und ich verwende Python 2.6.
Da es sich hierbei nicht um ein Qt- sondern um ein allgemeines Python Problem ([mod]multiprocessing[/mod]) handelt, passt es m.E. am besten in Allgemeine Fragen.
Vielen Dank für die Hilfe schon mal im Voraus!
mfG
ich habe ein Problem mit dem Modul [mod]multiprocessing[/mod]. Allerdings tritt dieses nur unter Windows auf, unter Linux funktioniert mein Code problemlos.
Ich beschreibe nun kurz was ich mache, vielleicht findet sich darin schon der eine oder andere Fehler.
In der Init Funktion der PyQt-Fensterklasse (QMainWindow), in welcher die Oberfläche erstellt wird, starte ich auch die anderen Prozesse bzw. koordiniere sie.
Dort mache ich erstmal folgendes:
Code: Alles auswählen
...
from multiprocessing import (Manager, log_to_stderr)
...
class MainWindow(QMainWindow):
def __init__(self):
super(MainWindow, self).__init__(None)
...
self.manager = Manager()
self.databaseQueue = self.manager.Queue()
...
self.databaseProc = DataProcess(self.databaseQueue)
self.snifferProc = SnifferProcess(self.databaseQueue)
...
SnifferProcess liest nun vom Netzwerk Daten ein, verarbeitet sie und gibt sie anschließend in die Queue. DataProcess holt sie sich aus der Queue und fügt sie dann in eine Datenbank ein.
Der Code des Prozesses sieht folgendermaßen aus:
Code: Alles auswählen
from multiprocessing import (Process)
class DataProcess(Process):
def __init__(self, dbqueue):
Process.__init__(self)
self.dbqueue = dbqueue
...
def run(self):
for data in iter(self.dbqueue.get, self.sentinel):
# Daten in Datenbank einfügen , self.sentinel ist nur die Abbruchbedingung
...
Code: Alles auswählen
self.dbqueue.put(daten)
Um das Problem zu verstehen poste ich noch kurz meine Haupt-Pythondatei:
Code: Alles auswählen
...
from multiprocessing import freeze_support
def main():
freeze_support()
print("Qt Version: %s" % QT_VERSION_STR)
print("PyQt Version: %s" % PYQT_VERSION_STR)
app = QApplication(argv)
app.setApplicationName("xy")
form = MainWindow()
form.show()
app.exec_()
main()
Vielleicht findet jemand eine Problemstelle oder hat gar so eine Situation schon mal erlebt.
Die Windows-Version unter der ich diese Software getestet habe, war übrigens Windows7 und ich verwende Python 2.6.
Da es sich hierbei nicht um ein Qt- sondern um ein allgemeines Python Problem ([mod]multiprocessing[/mod]) handelt, passt es m.E. am besten in Allgemeine Fragen.
Vielen Dank für die Hilfe schon mal im Voraus!
mfG