Asynchat + "Timer"
Verfasst: Montag 28. April 2008, 15:09
Moin!
Das Programm, welches ich gerade schreibe, nutzt asynchat, um mit einem Server zu kommunizieren. Das klappt auch sehr gut, asynchat laesst sich ja sehr komfortabel nutzen. Das Problem: Das Programm soll zusaetzlich (unabhaenging von Server-Events) alle n Sekunden etwas tun und daraufhin evtl. etwas an den Server raussenden.
Mein erster Gedanke war, einen zweiten Thread fuer den "Timer" aufzumachen, der dann auf meinem asynchat-Objekt die push-Methode aufruft. Das Asynchat-Modul ist aber nicht threadsafe, mein erster schneller Versuch, es mit diversen Locks zum Schreiben threadsafe zu machen, hat erstmal nicht geklappt. Bevor ich mir die Muehe mache und den Ansatz weiterverfolge, wuerde ich gerne erstmal Alternativen ueberdenken.
Eine andere Moeglichkeit waere ja, etwas zu bauen, was man in die Event-Loop von asynchat integrieren koennte. Etwas, was auf diesen select-Kram alle n Sekunden mit ok reagiert. Am einfachsten umzusetztende Variante: Ein "Timer"-Thread, der nen eigenen Socket auf dem Loopback-Device aufmacht, wo man dann ein eigenes asynchat-Objekt drauf horchen laesst, welches dann das push auf dem Server-asynchat-Objekt aufruft. Momentan scheint mir das die elegantere Loesung zu sein.
Gibt's noch mehr Moeglichkeiten? Andere Module? Twisted? Mal davon abgesehen, dass ich Twisted kaum kenne, scheint mir das auch ein wenig Overhead zu sein.
Das Programm, welches ich gerade schreibe, nutzt asynchat, um mit einem Server zu kommunizieren. Das klappt auch sehr gut, asynchat laesst sich ja sehr komfortabel nutzen. Das Problem: Das Programm soll zusaetzlich (unabhaenging von Server-Events) alle n Sekunden etwas tun und daraufhin evtl. etwas an den Server raussenden.
Mein erster Gedanke war, einen zweiten Thread fuer den "Timer" aufzumachen, der dann auf meinem asynchat-Objekt die push-Methode aufruft. Das Asynchat-Modul ist aber nicht threadsafe, mein erster schneller Versuch, es mit diversen Locks zum Schreiben threadsafe zu machen, hat erstmal nicht geklappt. Bevor ich mir die Muehe mache und den Ansatz weiterverfolge, wuerde ich gerne erstmal Alternativen ueberdenken.
Eine andere Moeglichkeit waere ja, etwas zu bauen, was man in die Event-Loop von asynchat integrieren koennte. Etwas, was auf diesen select-Kram alle n Sekunden mit ok reagiert. Am einfachsten umzusetztende Variante: Ein "Timer"-Thread, der nen eigenen Socket auf dem Loopback-Device aufmacht, wo man dann ein eigenes asynchat-Objekt drauf horchen laesst, welches dann das push auf dem Server-asynchat-Objekt aufruft. Momentan scheint mir das die elegantere Loesung zu sein.
Gibt's noch mehr Moeglichkeiten? Andere Module? Twisted? Mal davon abgesehen, dass ich Twisted kaum kenne, scheint mir das auch ein wenig Overhead zu sein.