Skip to content

Commit 8e43a83

Browse files
committed
fixing _stop for None pids
1 parent d4e08c5 commit 8e43a83

File tree

1 file changed

+9
-11
lines changed

1 file changed

+9
-11
lines changed

Lib/multiprocessing/resource_tracker.py

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -75,8 +75,16 @@ def _reentrant_call_error(self):
7575
raise ReentrantCallError(
7676
"Reentrant call into the multiprocessing resource tracker")
7777

78+
def __del__(self):
79+
# making sure child processess are cleaned before ResourceTracker
80+
# gets destructed.
81+
# see https://github.com/python/cpython/issues/88887
82+
self._stop()
83+
7884
def _stop(self):
7985
with self._lock:
86+
if self._pid is None:
87+
return
8088
# This should not happen (_stop() isn't called by a finalizer)
8189
# but we check for it anyway.
8290
if self._lock._recursion_count() > 1:
@@ -191,7 +199,7 @@ def unregister(self, name, rtype):
191199
'''Unregister name of resource with resource tracker.'''
192200
self._send('UNREGISTER', name, rtype)
193201

194-
def _send(self, cmd, name, rtype):
202+
def _send(self, cmd, name, rtype)::77
195203
try:
196204
self.ensure_running()
197205
except ReentrantCallError:
@@ -212,16 +220,6 @@ def _send(self, cmd, name, rtype):
212220
assert nbytes == len(msg), "nbytes {0:n} but len(msg) {1:n}".format(
213221
nbytes, len(msg))
214222

215-
def __del__(self):
216-
# making sure child processess are cleaned before ResourceTracker
217-
# gets destructed.
218-
# see https://github.com/python/cpython/issues/88887
219-
try:
220-
self._stop()
221-
except (OSError, TypeError, AttributeError) as e:
222-
pass
223-
224-
225223
_resource_tracker = ResourceTracker()
226224
ensure_running = _resource_tracker.ensure_running
227225
register = _resource_tracker.register

0 commit comments

Comments
 (0)