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
Antwort
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.
- 1. Kommunikation zwischen Threads in PySide
- 2. Kommunikation zwischen dem EDT und den Haupt-Threads
- 3. XPObject-Objekt zwischen Threads teilen
- 4. Softwarelösung für die Kommunikation zwischen zwei Teams?
- 5. Kommunikation zwischen Haupt-Thread und Worker-Threads in Android
- 6. Kommunikation mit niedriger Latenz zwischen Threads im selben Prozess
- 7. C# -Threads - Nachrichten zwischen Threads posten
- 8. Java-Socket-Kommunikation mit mehreren Threads testen
- 9. Kommunikation zwischen Python-Prozessen
- 10. Kommunikation zwischen Windows-Kernprozesse
- 11. React.js - Kommunikation zwischen Geschwisterkomponenten
- 12. Kommunikation zwischen C++ und Javascript für WebGL
- 13. Persistentes Python-Befehlszeilenprotokoll
- 14. Kommunikation zwischen den Seiten
- 15. Können wir EventObject für die Kommunikation zwischen verschiedenen JVMs verwenden?
- 16. AngularJS: Richtiger Weg für die Kommunikation zwischen zwei Controller
- 17. Code für die Kommunikation zwischen PHP und AS2?
- 18. Swift Delegate für die Kommunikation zwischen uiviewcontroller und uitableviewcontroller
- 19. Kommunikation zwischen Klassen/Listener
- 20. Kommunikation zwischen verschachtelten Direktiven
- 21. Kommunikation zwischen Applets
- 22. Kommunikation (Interprozess) zwischen Anwendungen?
- 23. Kommunikation zwischen Intranet-Anwendungen
- 24. Kommunikation zwischen Sitzungen
- 25. Kommunikation zwischen Rails apps
- 26. Kommunikation zwischen mehreren Servern
- 27. Kommunikation zwischen Prozessen
- 28. Kommunikation zwischen PHP & Golang
- 29. AngularJS-Kommunikation zwischen Modulen
- 30. Kommunikation zwischen Browser Registerkarte
Haben Sie darüber nachgedacht, eine Warteschlange pro Bot zu verwenden? –
Wie würde ich Daten in alle Warteschlangen legen? Oder zu einer bestimmten Warteschlange? – mrj
Haben Sie eine Liste aller Warteschlangen, dann können Sie leicht ein Element in jedem von ihnen hinzufügen. –