在Twisted中执行一个带时间递增的函数的最佳方法?

问题描述 投票:0回答:1

注意,这个答案是 此处 的工作原理和预期一样。

我想每隔X秒执行一个函数,并在每次连续运行时递增2秒。

所以举个例子,函数第一次运行时应该是3秒,然后是5秒,然后是7秒,以此类推...

第一次运行--3秒 第二次运行--5秒 第三次运行--7秒,以此类推......

我的代码是

from twisted.internet import task, reactor

timeout = 3 # three seconds

def doWork():
    #do work here
    pass

l = task.LoopingCall(doWork)
l.start(timeout) # call every three seconds

reactor.run()
python loops timeout twisted
1个回答
1
投票

你可以使用 reactor.callLater(n, fn, ...)

from twisted.internet import reactor

class Worker:

    max_timeout = 11
    increment = 2

    def __call__(self, interval):
        interval += self.increment          # <-- increment interval
        if interval > self.max_timeout:
            interval = self.max_timeout     # <-- don't go over max

        print(f"do work...{interval} interval")

        # call the func after N seconds
        reactor.callLater(interval, self, interval)

def main():
    worker = Worker()
    reactor.callLater(3, worker, 3)         # <-- start in 3 seconds
    reactor.run()

main()

如果代码中出现了需要停止的地方,那么只要有不调用 reactor.callLater().

© www.soinside.com 2019 - 2024. All rights reserved.