瀏覽代碼

Autoreload now works if module.__file__ is a .pyc. Closes #647

Ask Solem 13 年之前
父節點
當前提交
adb0884278
共有 2 個文件被更改,包括 7 次插入1 次删除
  1. 5 0
      celery/utils/imports.py
  2. 2 1
      celery/worker/autoreload.py

+ 5 - 0
celery/utils/imports.py

@@ -150,3 +150,8 @@ def reload_from_cwd(module, reloader=None):
         reloader = reload
         reloader = reload
     with cwd_in_path():
     with cwd_in_path():
         return reloader(module)
         return reloader(module)
+
+
+def module_file(module):
+    name = module.__file__
+    return name[:-1] if name.endswith(".pyc") else name

+ 2 - 1
celery/worker/autoreload.py

@@ -17,6 +17,7 @@ import time
 
 
 from collections import defaultdict
 from collections import defaultdict
 
 
+from celery.utils.imports import module_file
 from celery.utils.threads import bgThread, Event
 from celery.utils.threads import bgThread, Event
 
 
 from .abstract import StartStopComponent
 from .abstract import StartStopComponent
@@ -213,7 +214,7 @@ class Autoreloader(bgThread):
         self._hashes = None
         self._hashes = None
 
 
     def body(self):
     def body(self):
-        files = [sys.modules[m].__file__ for m in self.modules]
+        files = [module_file(sys.modules[m]) for m in self.modules]
         self._monitor = self.Monitor(files, self.on_change,
         self._monitor = self.Monitor(files, self.on_change,
                 shutdown_event=self._is_shutdown, **self.options)
                 shutdown_event=self._is_shutdown, **self.options)
         self._hashes = dict([(f, file_hash(f)) for f in files])
         self._hashes = dict([(f, file_hash(f)) for f in files])