2011-10-07 2 views
0

Voici un exemple de base de code pour montrer la base du bot IRC je en cours d'exécution:Faire quelque chose toutes les 60 secondes, de manière asynchrone

s=socket.socket() 
s.connect((foo, 1234)) 
s.send('NICK foo\r\n') 
s.send('USER foo bar baz :qux\r\n') 

while True: 
    readbuffer=readbuffer+s.recv(1024) 
    temp=string.split(readbuffer, "\n") 
    readbuffer=temp.pop() 

    for line in temp: 
     line=string.rstrip(line) 
     line=string.split(line) 

     if(line[0]=="PING"): 
      s.send("PONG %s\r\n" % line[1]) 

Toutefois, cela fonctionne très bien, disons que je voulais exécuter une commande envoyer un message toutes les 60 secondes, comment dois-je faire? Je suppose que cela devrait en quelque sorte être fait de manière asynchrone, hors de la boucle infinie?

+0

pourquoi de la boucle infinie? cron pourrait fonctionner je pense. – llazzaro

+0

Sûrement cron n'est pas nécessaire pour quelque chose d'aussi simple que cela ... –

+0

Si vous aviez utilisé Twisted pour votre bot IRC (comme vous devriez l'avoir presque certainement), vous utiliseriez simplement 'twisted.internet.task.LoopingCall' . – geoffspear

Répondre

0

Je suggère de lire this article. Il passe en revue les détails des coroutines, et le traitement asynchrone en python. Inclus est un tas de code python avec lequel vous pouvez jouer.

0

Oui, vous pourriez. Et oui, ce serait en dehors de la boucle sauf si vous vouliez temporiser l'intervalle de 60 secondes à l'intérieur de la boucle, par exemple en vérifiant l'horloge de temps en temps. Je voudrais mettre en place un minuteur d'intervalle de telle sorte qu'il appelle votre fonction de message tous les 60 secondes, puis laissez cette fonction faire l'envoi de façon asynchrone, comme vous le dites. Il pourrait y avoir une synchronisation (un genre différent de synchronisation :-) problèmes avec les envois qui se produisent dans la boucle, mais en théorie, cela fonctionnera tout simplement génial!

Questions connexes