python-irclib Multithreading?
Verfasst: Dienstag 21. Oktober 2008, 14:23
Hallo,
Ich habe folgenden Code:
Dieser ist teil meines irclib.SimpleIRCClient basierendes IRC Bots. Die Methode der übergoerdnete Bot Klasse (instance._parse) schnappt sich das erste Wort der Nachricht und schaut in einem dictionary ob sie einen übereinstimmenden key findet und führt dann den dazugehörigen wert aus.
Ein Kommando sieht dann z.b so aus
Und der dazugehörende Eintrag in self.commands
[code = py] self.commands = {'!echo':self.echo}[/code]
Wie ihr schon an der _on_privmsg sehen könnt, erstelle ich dynamisch eine neue Instanz einer Thread-Klasse und führe dort den self._parse Befehl aus von dem es weitergeht.
Das Problem, die Funktion wartet anscheinend bis der Thread durchgelaufen ist und springt dann erst in die Enlosschleife zurück um im IRC Nachrichten abzufangen. Gibt es da eine Lösung?
Crazed
Ich habe folgenden Code:
Code: Alles auswählen
def _on_privmsg(self, connection, event):
class Thread(threading.Thread):
def run(self, instance, connection, event):
instance._parse(connection, event)
thread = Thread()
thread.run(self, connection, event)
Code: Alles auswählen
def _parse(self, connection, event):
command = self._get_message(event).split()[0]
if self.commands.has_key(command):
self.commands[command](connection, event)
Code: Alles auswählen
def echo(self, connection, event):
print self._get_message(event)
[code = py] self.commands = {'!echo':self.echo}[/code]
Wie ihr schon an der _on_privmsg sehen könnt, erstelle ich dynamisch eine neue Instanz einer Thread-Klasse und führe dort den self._parse Befehl aus von dem es weitergeht.
Das Problem, die Funktion wartet anscheinend bis der Thread durchgelaufen ist und springt dann erst in die Enlosschleife zurück um im IRC Nachrichten abzufangen. Gibt es da eine Lösung?
Crazed