Python3 Webserver kommunizieren zwischen Threads für IRC bot

Ich habe eine Menge Dokumentation über Threading, Queuing, Pooling etc. gelesen, aber immer noch nicht herausfinden, wie man mein Problem lösen kann. Hier ist die Situation: Ich baute eine Python3 Django Anwendung, die von cherrypy serviert wird. Die Anwendung ist grundsätzlich ein weiterer IRC-Client. Wenn ich die GUI benutze, um meinen Code zum ersten Mal auszuführen, wird ein IRC-Bot durch einen Deamon Thread gestartet und hört auf Events. Mein Problem ist das folgende: Wie sende ich Daten an diesen Thread (und meinen Bot), zum Beispiel, um ihm zu sagen, dass er einem zweiten Kanal beitreten soll? Wenn ich meinen Code zum zweiten Mal laufe, wird offensichtlich eine neue Instanz meines Bots erstellt, zusammen mit einer neuen Serververbindung. Ich brauche einen Weg, um mit meinem Bot durch GUI Interaktion zu kommunizieren. Im Moment war die einzige Art, wie ich musste meine Bot reagieren die spezifischen Dinge ist durch das Lesen der Datenbank. Einige andere GUI-Aktionen würden diese Datenbank ändern. Das ist ein schlechtes System.

Hier ist der relevante Code, der meinen Bot startet.

def DCC_deamonthread(c, server, nickname, upload): try: c.connect(server, 6667, nickname) c.start() except irc.client.ServerConnectionError as x: log("error" + str(x)).write() upload.status, upload.active = "Error during connection", False upload.save() def upload_file(filename, rec_nick, pw): global upload Upload_Ongoing.objects.all().delete() upload = Upload_Ongoing(filename=filename,status="Connecting to server...", active=True) upload.save() irc.client.ServerConnection.buffer_class.encoding = 'latin-1' c = DCCSend(filename, rec_nick, pw) server = "irc.rizon.net" nickname = ''.join(random.choice(string.ascii_lowercase) for i in range(10)) t = threading.Thread(target=DCC_deamonthread, args=(c, server, nickname, upload)) t.daemon=True t.start() 

One Solution collect form web for “Python3 Webserver kommunizieren zwischen Threads für IRC bot”

Das Problem ist, wie Sie bemerkt haben, dass Sie einen neuen Thread / Bot jedes Mal gibt es einen Upload. Eine mögliche Lösung wäre, um Ihren Code umzuschreiben, um so etwas zu tun:

 event_queue = multiprocessing.Queue() # Events that will be sent to the IRC bot thread def irc_bot_thread(): bot = connect_to_irc() for event in event_queue: bot.handle_event(event) threading.Thread(target=irc_bot_thread).start() def upload_file(filename, rec_nick, pw): # Django stuff event_queue.push(<necessary data for use by the bot>) 
  • Fang mehr Schleifen zur gleichen Zeit? [abgeschlossen]
  • Kann ein Python-Skript wissen, dass eine andere Instanz des gleichen Skripts läuft ... und dann mit ihm reden?
  • Halten Sie den Eingang des Benutzers intakt, wenn er gleichzeitig an die Klemme ausgegeben wird
  • Python Selen Failing Wenn einige Threads Webdriver erstellen
  • Hat Threading in GTK mit Python in PyGObject Introspektion geändert?
  • AssertionError beim Threading in Python
  • Python Subprocess.Popen aus einem Thread
  • Äquivalent von setInterval in Python
  • Fang die Thread-Ausnahme im Anrufer-Thread in Python
  • Mit gevent monkey Patching mit Threading macht Thread Arbeit seriell
  • Python-Threads stack_size und segfaults
  • Python ist die beste Programmiersprache der Welt.