bpo-34054: multiprocessing uses time.monotonic() (GH-8118)
The multiprocessing module now uses the monotonic clock time.monotonic() instead of the system clock time.time() to implement timeouts.
This commit is contained in:
parent
6f19fc6d56
commit
c2368cbc83
|
@ -57,10 +57,10 @@ if sys.platform == 'win32':
|
|||
|
||||
|
||||
def _init_timeout(timeout=CONNECTION_TIMEOUT):
|
||||
return time.time() + timeout
|
||||
return time.monotonic() + timeout
|
||||
|
||||
def _check_timeout(t):
|
||||
return time.time() > t
|
||||
return time.monotonic() > t
|
||||
|
||||
#
|
||||
#
|
||||
|
@ -914,7 +914,7 @@ else:
|
|||
selector.register(obj, selectors.EVENT_READ)
|
||||
|
||||
if timeout is not None:
|
||||
deadline = time.time() + timeout
|
||||
deadline = time.monotonic() + timeout
|
||||
|
||||
while True:
|
||||
ready = selector.select(timeout)
|
||||
|
@ -922,7 +922,7 @@ else:
|
|||
return [key.fileobj for (key, events) in ready]
|
||||
else:
|
||||
if timeout is not None:
|
||||
timeout = deadline - time.time()
|
||||
timeout = deadline - time.monotonic()
|
||||
if timeout < 0:
|
||||
return ready
|
||||
|
||||
|
|
|
@ -18,8 +18,8 @@ import sys
|
|||
import threading
|
||||
import array
|
||||
import queue
|
||||
import time
|
||||
|
||||
from time import time as _time
|
||||
from traceback import format_exc
|
||||
|
||||
from . import connection
|
||||
|
@ -1045,13 +1045,13 @@ class ConditionProxy(AcquirerProxy):
|
|||
if result:
|
||||
return result
|
||||
if timeout is not None:
|
||||
endtime = _time() + timeout
|
||||
endtime = time.monotonic() + timeout
|
||||
else:
|
||||
endtime = None
|
||||
waittime = None
|
||||
while not result:
|
||||
if endtime is not None:
|
||||
waittime = endtime - _time()
|
||||
waittime = endtime - time.monotonic()
|
||||
if waittime <= 0:
|
||||
break
|
||||
self.wait(waittime)
|
||||
|
|
|
@ -95,12 +95,12 @@ class Queue(object):
|
|||
self._sem.release()
|
||||
else:
|
||||
if block:
|
||||
deadline = time.time() + timeout
|
||||
deadline = time.monotonic() + timeout
|
||||
if not self._rlock.acquire(block, timeout):
|
||||
raise Empty
|
||||
try:
|
||||
if block:
|
||||
timeout = deadline - time.time()
|
||||
timeout = deadline - time.monotonic()
|
||||
if not self._poll(timeout):
|
||||
raise Empty
|
||||
elif not self._poll():
|
||||
|
|
|
@ -15,8 +15,7 @@ import threading
|
|||
import sys
|
||||
import tempfile
|
||||
import _multiprocessing
|
||||
|
||||
from time import time as _time
|
||||
import time
|
||||
|
||||
from . import context
|
||||
from . import process
|
||||
|
@ -302,13 +301,13 @@ class Condition(object):
|
|||
if result:
|
||||
return result
|
||||
if timeout is not None:
|
||||
endtime = _time() + timeout
|
||||
endtime = time.monotonic() + timeout
|
||||
else:
|
||||
endtime = None
|
||||
waittime = None
|
||||
while not result:
|
||||
if endtime is not None:
|
||||
waittime = endtime - _time()
|
||||
waittime = endtime - time.monotonic()
|
||||
if waittime <= 0:
|
||||
break
|
||||
self.wait(waittime)
|
||||
|
|
|
@ -0,0 +1,3 @@
|
|||
The multiprocessing module now uses the monotonic clock
|
||||
:func:`time.monotonic` instead of the system clock :func:`time.time` to
|
||||
implement timeout.
|
Loading…
Reference in New Issue