2011-10-07 69 views
0

這裏是代碼基本樣本顯示IRC殭屍的基礎我已經運行:做好每60秒什麼的,異步

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

這工作得很好,但是,說我要執行的命令每60秒發送一條消息,我應該如何處理它?我認爲這會以某種方式不得不異步完成,離開無限循環?

+0

爲什麼出了無限循環的?克倫可以工作,我認爲。 – llazzaro

+0

當然,cron並不需要像這樣簡單的事情...... –

+0

如果你使用Twisted作爲你的IRC機器人(你幾乎可以肯定應該有),你可以使用'twisted.internet.task.LoopingCall' 。 – geoffspear

回答

0

我建議閱讀this article。它詳細介紹了協程和python中的異步處理。包括一堆你可以玩的示例python代碼。

0

是的,你可以。是的,它會在循環之外,除非你想在循環內超時60秒,例如每隔一段時間檢查一次時鐘。正如你所說,我會設置一個間隔計時器,以便它可以調用你的每60秒的消息函數,然後讓該函數異步執行發送。可能會發生同步(一種不同類型的同步:-)問題與循環內發生的問題,但理論上它會工作得很好!