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