Browse Source

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

Ask Solem 13 years ago
parent
commit
adb0884278
2 changed files with 7 additions and 1 deletions
  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
     with cwd_in_path():
         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 celery.utils.imports import module_file
 from celery.utils.threads import bgThread, Event
 
 from .abstract import StartStopComponent
@@ -213,7 +214,7 @@ class Autoreloader(bgThread):
         self._hashes = None
 
     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,
                 shutdown_event=self._is_shutdown, **self.options)
         self._hashes = dict([(f, file_hash(f)) for f in files])