[Python-checkins] bpo-34054: multiprocessing uses time.monotonic() (GH-8118)

Miss Islington (bot) webhook-mailer at python.org
Fri Jul 6 08:11:24 EDT 2018


https://github.com/python/cpython/commit/4bd5fce27d5c03a013e5ebb008670ca0d89e3298
commit: 4bd5fce27d5c03a013e5ebb008670ca0d89e3298
branch: 3.7
author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com>
committer: GitHub <noreply at github.com>
date: 2018年07月06日T05:11:21-07:00
summary:
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.
(cherry picked from commit c2368cbc83ca2bafeaea0e4760be4996046d0444)
Co-authored-by: Victor Stinner <vstinner at redhat.com>
files:
A Misc/NEWS.d/next/Library/2018-07-05-18-37-05.bpo-34054.nWRS6M.rst
M Lib/multiprocessing/connection.py
M Lib/multiprocessing/managers.py
M Lib/multiprocessing/queues.py
M Lib/multiprocessing/synchronize.py
diff --git a/Lib/multiprocessing/connection.py b/Lib/multiprocessing/connection.py
index 7a621a55f468..1f3ea504fff4 100644
--- a/Lib/multiprocessing/connection.py
+++ b/Lib/multiprocessing/connection.py
@@ -57,10 +57,10 @@
 
 
 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 @@ def wait(object_list, timeout=None):
 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 @@ def wait(object_list, timeout=None):
 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
 
diff --git a/Lib/multiprocessing/managers.py b/Lib/multiprocessing/managers.py
index 04df26bac661..3f263802bc7c 100644
--- a/Lib/multiprocessing/managers.py
+++ b/Lib/multiprocessing/managers.py
@@ -18,8 +18,8 @@
 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 @@ def wait_for(self, predicate, timeout=None):
 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)
diff --git a/Lib/multiprocessing/queues.py b/Lib/multiprocessing/queues.py
index 715a9b0e1290..88f7d267bfd3 100644
--- a/Lib/multiprocessing/queues.py
+++ b/Lib/multiprocessing/queues.py
@@ -95,12 +95,12 @@ def get(self, block=True, timeout=None):
 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():
diff --git a/Lib/multiprocessing/synchronize.py b/Lib/multiprocessing/synchronize.py
index 038f73f6b765..5137c49c1b6c 100644
--- a/Lib/multiprocessing/synchronize.py
+++ b/Lib/multiprocessing/synchronize.py
@@ -15,8 +15,7 @@
 import sys
 import tempfile
 import _multiprocessing
-
-from time import time as _time
+import time
 
 from . import context
 from . import process
@@ -302,13 +301,13 @@ def wait_for(self, predicate, timeout=None):
 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)
diff --git a/Misc/NEWS.d/next/Library/2018-07-05-18-37-05.bpo-34054.nWRS6M.rst b/Misc/NEWS.d/next/Library/2018-07-05-18-37-05.bpo-34054.nWRS6M.rst
new file mode 100644
index 000000000000..9d4d1f24db49
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2018-07-05-18-37-05.bpo-34054.nWRS6M.rst
@@ -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.


More information about the Python-checkins mailing list

AltStyle によって変換されたページ (->オリジナル) /