python-irclib Multithreading?

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
Crazed
User
Beiträge: 171
Registriert: Sonntag 18. Mai 2008, 11:44

Hallo,

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)
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.

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)
Ein Kommando sieht dann z.b so aus

Code: Alles auswählen

    def echo(self, connection, event):
        print self._get_message(event)
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
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Threadklassen startet man aber immer noch mit ``start`` und nicht mit ``run``. So wird ja einfach die Methode ``run`` im gleichen Thread ausgefuehrt.

Edit: Natürlich meinte ich Instanzen der Thread-Klasse.
Zuletzt geändert von Leonidas am Dienstag 21. Oktober 2008, 17:26, insgesamt 2-mal geändert.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Crazed
User
Beiträge: 171
Registriert: Sonntag 18. Mai 2008, 11:44

Natürlich, du hast Recht! Vielen Dank Leonidas.

Ich habe irgendwie das Gefühl das das Forum aktiver geworden ist seitdem ich mich hier registriert habe. Oder meine Fragen sind einfach bis zu so einem Maße logisch geworden das sie ein normaler Mensch beantworten kann. ^^

Crazed

EDIT:

Ist es jetzt wohl intelligenter die Funktion in einem neuen Thread aufzurufen oder die self._parse Methode...
Antworten