2016-07-23 6 views
1

Wie gezeigt here, ich eine Python-Django-Anwendung eingerichtet, die von cherrypy WSGI Server bedient. Die App ist im Grunde ein anderer IRC-Client. Hier ist der Deal: Es ist sehr wahrscheinlich, dass ich mehrere separate Instanzen meines Bot für jede neue Serververbindung erstellen muss, die ich einrichten muss. Ich muss in der Lage sein, mit jedem Bot zu kommunizieren. Eine vorgeschlagene Antwort war die Verwendung von multiprocessing.Queue. Dieses Objekt ist Daten persistent und erlaubt mir, mit einem Bot zu kommunizieren. Ich brauche jedoch alle meine Bots, um dasselbe Signal gleichzeitig zu hören, zum Beispiel anzuhalten. Jeder Bot muss kontrollieren, ob das Stoppsignal für ihn war oder nicht. Daher brauche ich ein Objekt oder eine andere Methode, die es jedem Bot ermöglicht, in einem separaten dämonischen Thread zu laufen, um eine Reihe von Signalen zu hören. Das Bussystem, das von cherrypy für serverweite Nachrichten verwendet wird, ist großartig, scheint aber hier ein Overkill zu sein und ich hätte keine Ahnung, wie ich es implementieren soll. Irgendwelche Vorschläge ?Python-Daten persistentes Objekt für die Kommunikation zwischen Threads

+1

Haben Sie darüber nachgedacht, eine Warteschlange pro Bot zu verwenden? –

+0

Wie würde ich Daten in alle Warteschlangen legen? Oder zu einer bestimmten Warteschlange? – mrj

+1

Haben Sie eine Liste aller Warteschlangen, dann können Sie leicht ein Element in jedem von ihnen hinzufügen. –

Antwort

0

So stellt sich heraus, ich habe nur Variablen und Objekte vermischt. Variablen können nicht in einem Modul definiert und in ein anderes Modul importiert werden (a = foo, dann ändern Sie ein Modul von einem anderen Modul und importieren ein Modul vom dritten Modul). Dies ist möglich mit Listen, Diktaten und anderem. Lösung: Bei jedem Bot-Start (und dem Versuch, eine Verbindung zu einem bestimmten Server herzustellen) wird eine Warteschlange erstellt und diesem Server in einem dict mit einem Schlüssel zugewiesen: dem Spitznamen (der im IRC eindeutig sein muss). Jeder Bot hat einen deamonischen Listener, der die Warteschlange liest. Andere Module importieren das Diktat, die spezifische Warteschlange, setzen dort ein Signal, das vom Zuhörer benutzt wird. Das System funktioniert perfekt. Daumen hoch. Ich habe jedoch Schwierigkeiten mit einem Aspekt: ​​Jeder Bot kann mehrere DCC-Verbindungen haben und es ist schwierig, jeder Verbindung Daten zuzuordnen und sie nicht zu verwechseln.

Verwandte Themen