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:
Victor Stinner 2018-07-06 13:51:52 +02:00 committed by GitHub
parent 6f19fc6d56
commit c2368cbc83
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 15 additions and 13 deletions

View File

@ -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

View File

@ -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)

View File

@ -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():

View File

@ -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)

View File

@ -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.