Python 2.7 只运行一个扭曲的循环调用

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

我在twisted服务器中使用twisted循环调用在特定时间间隔后调用一次。我的代码如下:

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?你说你想要一个循环,你没有说你想要循环做什么。对不起,我想我没有清楚地说明我的问题。