具有扭曲的为期1天的经验,我尝试安排消息回复发送到TCP客户端:Python扭曲:如何安排?
import os, sys, time
from twisted.internet import protocol, reactor
self.scenario = [(1, "Message after 1 sec!"), (4, "This after 4 secs"), (2, "End final after 2 secs")]
for timeout, data in self.scenario:
reactor.callLater(timeout, self.sendata, data)
print "waited %d time, sent %s\n"%(timeout, data)
现在,它发送的消息,但我有2个问题:
1)“超时”是从去“现在“,并且我想在每个前一个任务完成之后对其进行计数(之前的消息已发送)
2)我不知道如何在所有消息发送后关闭连接。如果我在callLater
之后放置self.transport.loseConnection()
,它立即关闭连接。
在之前的尝试中,我没有使用reactor.callLater
,但只有self.transport.write()
和time.sleep(n)
在for
循环中。在这种情况下,所有消息在所有超时过后都会一起发送......不是我想要的。
目的是等待客户端连接,等待timeout1并发送message1,等待timeout2并发送message2,等等。最后的消息 - 关闭连接之后。
谢谢,现在我明白了为什么“睡大觉”,没有工作。你能举一个例子,在前面reactor.callLater()的末尾安排reactor.callLater()吗? – DominiCane 2010-07-22 05:12:40
只需定义一个调用'self.sendata(data)'的函数,然后为下一个回调调用'reactor.callLater()',并将该函数传递给第一个'reactor.callLater()'而不是'self.sendata ' – 2010-07-22 18:26:53