|
@@ -176,6 +176,16 @@ class Worker(object):
|
|
|
print("discard: Erased %d %s from the queue.\n" % (count, what))
|
|
|
|
|
|
def worker_init(self):
|
|
|
+ # Re-init the logging system.
|
|
|
+ # Workaround for http://bugs.python.org/issue6721#msg140215
|
|
|
+ # In short: Pythons logging module uses RLock() objects.
|
|
|
+ # These are broken after fork.
|
|
|
+ # and can cause a deadlock (Issue #496).
|
|
|
+ logger_names = logging.Logger.manager.loggerDict.keys()
|
|
|
+ for logger_name in logger_names:
|
|
|
+ for handler in logging.getLogger(logger_name).handlers:
|
|
|
+ handler.createLock()
|
|
|
+
|
|
|
# Run the worker init handler.
|
|
|
# (Usually imports task modules and such.)
|
|
|
self.loader.init_worker()
|