[Python-checkins] bpo-35491: Enhance multiprocessing.BaseProcess.__repr__() (GH-11138)

Victor Stinner webhook-mailer at python.org
Fri Dec 14 06:58:57 EST 2018


https://github.com/python/cpython/commit/7acd50ad8b2a4fe132f7b26980ed3cd209b7ea12
commit: 7acd50ad8b2a4fe132f7b26980ed3cd209b7ea12
branch: master
author: Victor Stinner <vstinner at redhat.com>
committer: GitHub <noreply at github.com>
date: 2018年12月14日T12:58:52+01:00
summary:
bpo-35491: Enhance multiprocessing.BaseProcess.__repr__() (GH-11138)
* Add the pid and parent pid to multiprocessing.BaseProcess.__repr__().
* Add negative sign (ex: "-SIGTERM") to exitcode (process killed
 by a signal)
* Only call _popen.poll() once.
Example:
 <ForkProcess(ForkPoolWorker-1, started daemon)>
becomes:
 <ForkProcess name='ForkPoolWorker-1' pid=12449 parent=12448 started daemon>
Example:
 <ForkProcess(ForkPoolWorker-1, stopped[SIGTERM] daemon)>
becomes:
 <ForkProcess name='ForkPoolWorker-1' pid=12960 parent=12959 stopped exitcode=-SIGTERM daemon>
files:
A Misc/NEWS.d/next/Library/2018-12-14-12-12-15.bpo-35491.jHsNOU.rst
M Doc/library/multiprocessing.rst
M Lib/multiprocessing/process.py
diff --git a/Doc/library/multiprocessing.rst b/Doc/library/multiprocessing.rst
index 578b5483286a..1d0920aa608b 100644
--- a/Doc/library/multiprocessing.rst
+++ b/Doc/library/multiprocessing.rst
@@ -626,14 +626,14 @@ The :mod:`multiprocessing` package mostly replicates the API of the
 >>> import multiprocessing, time, signal
 >>> p = multiprocessing.Process(target=time.sleep, args=(1000,))
 >>> print(p, p.is_alive())
- <Process(..., initial)> False
+ <Process ... initial> False
 >>> p.start()
 >>> print(p, p.is_alive())
- <Process(..., started)> True
+ <Process ... started> True
 >>> p.terminate()
 >>> time.sleep(0.1)
 >>> print(p, p.is_alive())
- <Process(..., stopped[SIGTERM])> False
+ <Process ... stopped exitcode=-SIGTERM> False
 >>> p.exitcode == -signal.SIGTERM
 True
 
diff --git a/Lib/multiprocessing/process.py b/Lib/multiprocessing/process.py
index cd592d0bdf09..780f2d0c2734 100644
--- a/Lib/multiprocessing/process.py
+++ b/Lib/multiprocessing/process.py
@@ -248,6 +248,7 @@ def sentinel(self):
 raise ValueError("process not started") from None
 
 def __repr__(self):
+ exitcode = None
 if self is _current_process:
 status = 'started'
 elif self._closed:
@@ -257,19 +258,23 @@ def __repr__(self):
 elif self._popen is None:
 status = 'initial'
 else:
- if self._popen.poll() is not None:
- status = self.exitcode
- else:
- status = 'started'
-
- if type(status) is int:
- if status == 0:
+ exitcode = self._popen.poll()
+ if exitcode is not None:
 status = 'stopped'
 else:
- status = 'stopped[%s]' % _exitcode_to_name.get(status, status)
+ status = 'started'
 
- return '<%s(%s, %s%s)>' % (type(self).__name__, self._name,
- status, self.daemon and ' daemon' or '')
+ info = [type(self).__name__, 'name=%r' % self._name]
+ if self._popen is not None:
+ info.append('pid=%s' % self._popen.pid)
+ info.append('parent=%s' % self._parent_pid)
+ info.append(status)
+ if exitcode is not None:
+ exitcode = _exitcode_to_name.get(exitcode, exitcode)
+ info.append('exitcode=%s' % exitcode)
+ if self.daemon:
+ info.append('daemon')
+ return '<%s>' % ' '.join(info)
 
 ##
 
@@ -373,7 +378,7 @@ def close(self):
 
 for name, signum in list(signal.__dict__.items()):
 if name[:3]=='SIG' and '_' not in name:
- _exitcode_to_name[-signum] = name
+ _exitcode_to_name[-signum] = f'-{name}'
 
 # For debug and leak testing
 _dangling = WeakSet()
diff --git a/Misc/NEWS.d/next/Library/2018-12-14-12-12-15.bpo-35491.jHsNOU.rst b/Misc/NEWS.d/next/Library/2018-12-14-12-12-15.bpo-35491.jHsNOU.rst
new file mode 100644
index 000000000000..7bb650ad7349
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2018-12-14-12-12-15.bpo-35491.jHsNOU.rst
@@ -0,0 +1,4 @@
+:mod:`multiprocessing`: Add ``Pool.__repr__()`` and enhance
+``BaseProcess.__repr__()`` (add pid and parent pid) to ease debugging. Pool
+state constant values are now strings instead of integers, for example ``RUN``
+value becomes ``'RUN'`` instead of ``0``.


More information about the Python-checkins mailing list

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