2

Timer クラスを使用し、callable でタイマーを再起動することは、Python でバックグラウンドで定期的なタイマーを実行する標準的な方法です。

これには 2 つの大きな欠点があります。

  • それは実際には周期的ではありません: タイマーのセットアップ、...
  • 期間ごとに新しいスレッドを作成します

Timer クラスに代わるものはありますか? sched クラスを確認しましたが、MainThread で実行するとブロックされるため、マルチスレッド環境で実行することはお勧めしません。

たとえば、大量のデータを収集してデータベースに送信するときにドキュメント キューを定期的に空にするなど、Python で高頻度の定期タイマー (100 ミリ秒周期) を設定するにはどうすればよいですか?

4

1 に答える 1

4

私は次の代替案を思いつきました:

import threading
import time

class PeriodicThread(StoppableThread):
    '''Similar to a Timer(), but uses only one thread, stops cleanly and exits when the main thread exits'''

    def __init__ (self, period, callable, *args, **kwargs):
        super(PeriodicThread, self).__init__()
        self.period   = period
        self.args     = args
        self.callable = callable
        self.kwargs   = kwargs
        self.daemon   = True

    def run(self):
        while not self.stopped():
            self.callable(*self.args, **self.kwargs)
            time.sleep(self.period)
于 2013-01-24T20:37:06.967 に答える