Browse Source

Monkey patches the multiprocessing backport "processName" error

Conflicts:

	celery/pool.py
Ask Solem 15 years ago
parent
commit
892f7a8221
1 changed files with 29 additions and 0 deletions
  1. 29 0
      celery/patch.py

+ 29 - 0
celery/patch.py

@@ -0,0 +1,29 @@
+import logging
+import sys
+
+
+def _check_logger_class():
+    """Make sure process name is recorded when loggers are used."""
+
+    from multiprocessing.process import current_process
+    logging._acquireLock()
+    try:
+        OldLoggerClass = logging.getLoggerClass()
+        if not getattr(OldLoggerClass, '_process_aware', False):
+
+            class ProcessAwareLogger(OldLoggerClass):
+                _process_aware = True
+
+                def makeRecord(self, *args, **kwds):
+                    record = OldLoggerClass.makeRecord(self, *args, **kwds)
+                    record.processName = current_process()._name
+                    return record
+            logging.setLoggerClass(ProcessAwareLogger)
+    finally:
+        logging._releaseLock()
+
+def monkeypatch():
+    major, minor = sys.version_info[:2]
+    if major == 2 and minor < 6: # python < 2.6
+        _check_logger_class()
+