Python 2.7 只运行一个扭曲的循环调用
我在twisted服务器中使用twisted循环调用在特定时间间隔后调用一次。我的代码如下:Python 2.7 只运行一个扭曲的循环调用,python-2.7,twisted,Python 2.7,Twisted,我在twisted服务器中使用twisted循环调用在特定时间间隔后调用一次。我的代码如下: class Echo(LineReceiver): def connectionMade(self): self.factory.clients.append(self) self.setRawMode() startClock(self) print 'Connected Client', self._peer def
class Echo(LineReceiver):
def connectionMade(self):
self.factory.clients.append(self)
self.setRawMode()
startClock(self)
print 'Connected Client', self._peer
def connectionLost(self, reason):
self.factory.clients.remove(self)
print 'Lost connection from', self._peer
def rawDataReceived(self, data):
inputArray = ["%02X"%ord(inp) for inp in data]
if(CheckPacket(inputArray)):
PacketParser(inputArray, self)
else:
print "Fail"
d = self.transport.getHost ()
print d.type
def startClock(self):
l = task.LoopingCall(partial(sendTimeRequest,self))
l.start(660.0)
def main():
port = 8000
factory = protocol.ServerFactory()
factory.protocol = Echo
factory.clients = []
try:
reactor.listenTCP(port,factory)
except Exception, ex:
print "Port %d is busy: %s" % (port, ex)
reactor.run()
所以,我的问题是,每次新客户机连接到服务器时,都会启动一个新的循环调用。我如何确保他们的客户端连接到服务器时,只有一个循环调用正在运行?目前,它是以以下方式发生的,当第一个客户机连接到服务器时,一个扭曲的循环调用开始,每10秒调用一次函数a()。然后在2秒钟后,另一个客户端连接到服务器,然后另一个循环调用在每10秒钟后开始调用函数a(),但最后它变成这样
运行时间|调用函数
第10节| a()
第12节| a()
第20节| a()
第22节a()
但我希望函数a()只在每10秒后调用一次,而不考虑连接到服务器的客户端数量。每个连接都有一个
协议
实例。每个实例都有其在建立连接时调用的connectionMade
方法
此方法:
def connectionMade(self):
self.factory.clients.append(self)
self.setRawMode()
startClock(self)
每个连接调用一次,因此每个连接调用一次startClock
与此相反的是您的主功能。它只被调用一次。如果将startClock
调用放入main
并将其从connectionMade
中取出,则startClock
将只被调用一次。它将在程序启动时在建立任何连接之前调用,并且不再调用
请注意,代码已经在factory实例上维护了一个协议
实例列表。这意味着,给定对工厂的引用,您可以访问所有协议
实例。这意味着,如果将工厂作为参数传递给正在循环的函数…在特定时间间隔后调用一次
?它们应该只运行一次循环调用,而现在每次新客户端连接到服务器时,都会启动一个新的循环调用。问题底部有一个编辑按钮。请解决这个问题。:)如果不清楚的话,这个问题的语法对我来说似乎有问题。我不明白你想表达什么。不是我引用的部分,也不是我不明白的部分…如果我将StartLock移动到main,我如何传递self object?你说你想要一个循环,你没有说你想要循环做什么。对不起,我想我没有清楚地说明我的问题。