gpt4 book ai didi

python - 如何设置LoopingCall 调度的函数的调用次数?

转载 作者:太空宇宙 更新时间:2023-11-04 00:33:39 25 4
gpt4 key购买 nike

这是代码的框架:

from twisted.internet import reactor
from twisted.internet.task import LoopingCall

def do_something():
print "Doing something..."

def process_result():
print "Processing result..."

def loop():
LoopingCall(do_something).start(1)

reactor.callWhenRunning(loop)
reactor.run()

在我的代码中,我想运行 do_something 100 次,之后我将调用 process_result 来执行其名称指示的操作。

在文档中我发现了一个 withCount ,但是我对其中的“自上次调用以来应该发生的事情”和“计数通常为 1”感到困惑。 (使用LoopingCall调用一个函数一次?有什么意义?我想我误解了它但正确的解释是什么?)

我想知道:withCount 是否正确使用?如果是,有人可以提供一个具体的例子吗?

最佳答案

withCount 在 LoopingCall 错过迭代时为您提供有用的信息。例如,如果间隔为 1,但该函数需要 5 秒,则该函数应该被调用的次数为 5。但是,在您的示例中,该函数几乎立即返回(并且不是延迟的)所以它将始终为 1。

from twisted.internet import reactor
from twisted.internet.task import LoopingCall

def do_something(count):
print "Doing something..." + str(count)

def process_result():
print "Processing result..."

def loop():
LoopingCall.withCount(do_something).start(1)

reactor.callWhenRunning(loop)
reactor.run()

您需要检查函数被调用的次数,当达到指定次数时使用lc.stop。如果你不想在do_something中引入额外的逻辑,你可以做一个包装类。

from twisted.internet import reactor
from twisted.internet.task import LoopingCall

def do_something():
print "Doing something..."

def process_result():
print "Processing result..."

def loop():
LoopingCallWithCounter(5, do_something).lc.start(1)

class LoopingCallWithCounter:
def __init__(self, count, f, *a, **kw):
self.i = 0
def wrapper():
if self.i >= count:
self.lc.stop()
else:
f(*a, **kw)
self.i += 1
self.lc = LoopingCall(wrapper)

reactor.callWhenRunning(loop)
reactor.run()

最后,由于 lc.startlc.stop 被调用时返回一个延迟,你可以简单地使用 addCallback(process_result) 来做后期处理。请注意,process_result 应该有一个参数。

关于python - 如何设置LoopingCall 调度的函数的调用次数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44968182/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com