コードのスケルトンは次のとおりです。
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.start
れたときに遅延を返すため、後処理を行うためにlc.stop
使用できますaddCallback(process_result)
。process_result
引数を取る必要があることに注意してください。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加