Use monotonic instead of time.time()

This commit is contained in:
Kovid Goyal 2019-10-20 19:01:09 +05:30
parent 0822f1b6fa
commit f2750c00cb
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C

View File

@ -6,7 +6,7 @@ __license__ = 'GPL v3'
__copyright__ = '2012, Kovid Goyal <kovid@kovidgoyal.net>' __copyright__ = '2012, Kovid Goyal <kovid@kovidgoyal.net>'
__docformat__ = 'restructuredtext en' __docformat__ = 'restructuredtext en'
import os, traceback, time, importlib import os, time, traceback, importlib
from multiprocessing.connection import Client from multiprocessing.connection import Client
from threading import Thread from threading import Thread
from contextlib import closing from contextlib import closing
@ -15,6 +15,7 @@ from calibre.constants import iswindows
from calibre.utils.ipc import eintr_retry_call from calibre.utils.ipc import eintr_retry_call
from calibre.utils.ipc.launch import Worker from calibre.utils.ipc.launch import Worker
from calibre.utils.serialize import msgpack_loads, msgpack_dumps from calibre.utils.serialize import msgpack_loads, msgpack_dumps
from calibre.utils.monotonic import monotonic
from polyglot.builtins import unicode_type, string_or_bytes, environ_item from polyglot.builtins import unicode_type, string_or_bytes, environ_item
from polyglot.binary import as_hex_unicode, from_hex_bytes from polyglot.binary import as_hex_unicode, from_hex_bytes
@ -94,12 +95,12 @@ def communicate(ans, worker, listener, args, timeout=300, heartbeat=None,
abort=None): abort=None):
cw = ConnectedWorker(listener, args) cw = ConnectedWorker(listener, args)
cw.start() cw.start()
st = time.time() st = monotonic()
check_heartbeat = callable(heartbeat) check_heartbeat = callable(heartbeat)
while worker.is_alive and cw.is_alive(): while worker.is_alive and cw.is_alive():
cw.join(0.01) cw.join(0.01)
delta = time.time() - st delta = monotonic() - st
if not cw.accepted and delta > min(10, timeout): if not cw.accepted and delta > min(10, timeout):
break break
hung = not heartbeat() if check_heartbeat else delta > timeout hung = not heartbeat() if check_heartbeat else delta > timeout