システムの稼働時間を使用するPythonthreading.Timerに相当するものを取得するにはどうすればよいですか?

ロスマッカーサー

TL; DR threading.Timerはシステム時間を使用しますが、使用中に時間が変化します。システムの稼働時間を使用するにはどうすればよいですか?

私はPythonスクリプトを持っており、その1つがシステム時刻に設定されています。このスクリプトが起動すると、時間が間違っています。このスクリプトには、30秒のグローバルタイムアウトも必要です。

私は次のタイムアウトクラスを使用しています:

class Timeout(object):
    def __init__(self, seconds=1, signum=signal.SIGUSR1, exception=TimeoutException):
        self.exception = exception
        self.pid = os.getpid()
        self.signum = signum
        self.timer = threading.Timer(seconds, self.exit_function)

    def exit_function(self):
        os.kill(self.pid, self.signum)

    def handle_timeout(self, signum, frame):
        raise self.exception()

    def __enter__(self):
        signal.signal(self.signum, self.handle_timeout)
        self.timer.start()

    def __exit__(self, type, value, traceback):
        self.timer.cancel()

これでスクリプト全体がラップされます。

with Timeout(seconds=30):
    main()

スクリプトがすぐに失敗したり、30秒後に強制終了されたりしないことがあります。これはthreading.Timer、スクリプトの実行中に変更されるシステム時刻を使用しているためだと思いますとにかく、システムの稼働時間を使用するためにそれを取得することはできますか?

ロスマッカーサー

更新

私が今していることは、PyPIthreading._timemonotonicパッケージから単調関数でモンキーパッチを適用することです。

import threading
import monotonic

threading._time = monotonic.monotonic

元の答え

threading.Timerシステムの稼働時間を使用するように拡張することになりました。

class Timer(threading._Timer):

    def __init__(self, *args, **kwargs):
        super(Timer, self).__init__(*args, **kwargs)

        # only works on Linux
        self._libc = ctypes.CDLL('libc.so.6')
        self._buf = ctypes.create_string_buffer(128)

    def uptime(self):
        self._libc.sysinfo(self._buf)
        return struct.unpack_from('@l', self._buf.raw)[0]

    def run(self):
        start_time = self.uptime()
        while not self.finished.is_set():
            time.sleep(0.1)
            if self.uptime() - start_time > self.interval:
                self.function(*self.args, **self.kwargs)
                break
        self.finished.set()

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ