[stable-2.10] Fix super annoying Python 2.6 multiprocessing.Queue stack trace in CI (#72604) (#72608)
* Fix super annoying Python 2.6 multiprocessing.Queue stack trace in CI
A bug exists in Python 2.6 that sometimes raises an exception during interpreter shutdown. We
encounter this frequently in our CI since we run tests on CentOS 6 as the control node, which
has Python 2.6.6 with this bug.
This PR adds a very minor sleep only on Python 2.6 which gets around this issue. I did lot of testing
using a standalon script I found that easily duplicated the issue to find the minimum sleep value
needed to avoid this issue.
CPython issue: https://bugs.python.org/issue4106
Fix in CPython: https://hg.python.org/cpython/rev/d316315a8781
* Use correct attribute
(cherry picked from commit bbef250c2b
)
Co-authored-by: Sam Doran <sdoran@redhat.com>
This commit is contained in:
parent
ed78b479ec
commit
581337a6d5
2
changelogs/fragments/py26-multiprocess-queue-bug.yml
Normal file
2
changelogs/fragments/py26-multiprocess-queue-bug.yml
Normal file
|
@ -0,0 +1,2 @@
|
|||
bugfixes:
|
||||
- account for bug in Python 2.6 that occurs during interpreter shutdown to avoid stack trace
|
|
@ -20,6 +20,7 @@ from __future__ import (absolute_import, division, print_function)
|
|||
__metaclass__ = type
|
||||
|
||||
import os
|
||||
import sys
|
||||
import tempfile
|
||||
import time
|
||||
|
||||
|
@ -293,6 +294,22 @@ class TaskQueueManager:
|
|||
self._final_q.close()
|
||||
self._cleanup_processes()
|
||||
|
||||
# A bug exists in Python 2.6 that causes an exception to be raised during
|
||||
# interpreter shutdown. This is only an issue in our CI testing but we
|
||||
# hit it frequently enough to add a small sleep to avoid the issue.
|
||||
# This can be removed once we have split controller available in CI.
|
||||
#
|
||||
# Further information:
|
||||
# Issue: https://bugs.python.org/issue4106
|
||||
# Fix: https://hg.python.org/cpython/rev/d316315a8781
|
||||
#
|
||||
try:
|
||||
if (2, 6) == (sys.version_info[0:2]):
|
||||
time.sleep(0.0001)
|
||||
except (IndexError, AttributeError):
|
||||
# In case there is an issue getting the version info, don't raise an Exception
|
||||
pass
|
||||
|
||||
def _cleanup_processes(self):
|
||||
if hasattr(self, '_workers'):
|
||||
for attempts_remaining in range(C.WORKER_SHUTDOWN_POLL_COUNT - 1, -1, -1):
|
||||
|
|
Loading…
Reference in a new issue