私は、毎秒10回、呼び出したい機能を持っています。私はこのようなコードでスタート:これは、[OK]を動作しますが、the_operationがあるため、操作そのものを実行する時間を、わずかに少ないことが多い所望のものより呼ばれ与えられた平均スループットを維持しながら、さまざまな時間がかかる操作を実行する方法
while True:
the_operation()
time.sleep(1.0/TIMES_PER_SECOND)
。私たちは、代わりにこのようなコードを見て作ることができます。
while True:
t = time.time()
the_operation()
time_to_sleep = 1.0/TIMES_PER_SECOND - (time.time() - t)
if time_to_sleep > 0:
time.sleep(time_to_sleep)
をこれは良いですが、それでも十分ではない良い - ループを実行するための時間は考慮されていない、とthe_operationは長い1/TIMES_PER_SECONDよりも有意に取るように発生した場合ある反復では、スループットが低すぎます。平均操作は1/TIMES_PER_SECOND未満ですが、コードは時間がかかる場合を処理する必要があります。
平均して指定されたレートでthe_operationを呼び出すための良いパターンは何ですか?