Browse Source

More autoreloader fixes

Ask Solem 13 years ago
parent
commit
439a56688a
2 changed files with 7 additions and 5 deletions
  1. 3 3
      celery/utils/threads.py
  2. 4 2
      celery/worker/autoreload.py

+ 3 - 3
celery/utils/threads.py

@@ -39,9 +39,9 @@ class bgThread(Thread):
     def body(self):
         raise NotImplementedError("subclass responsibility")
 
-    def on_crash(self, msg, *fmt, **kwargs):
+    def on_crash(self, exc_info, msg, *fmt, **kwargs):
         sys.stderr.write((msg + "\n") % fmt)
-        traceback.print_stack(file=sys.stderr)
+        traceback.print_exception(*exc_info, file=sys.stderr)
 
     def run(self):
         shutdown = self._is_shutdown
@@ -49,7 +49,7 @@ class bgThread(Thread):
             try:
                 self.body()
             except Exception, exc:
-                self.on_crash("%r crashed: %r", self.name, exc, exc_info=True)
+                self.on_crash(sys.exc_info(), "%r crashed: %r", self.name, exc)
                 # exiting by normal means does not work here, so force exit.
                 os._exit(1)
         try:

+ 4 - 2
celery/worker/autoreload.py

@@ -39,7 +39,6 @@ class WorkerComponent(StartStopComponent):
     def create(self, w):
         w.autoreloader = self.instantiate(w.autoreloader_cls,
                                           controller=w,
-                                          modules=w.autoreload,
                                           logger=w.logger)
         return w.autoreloader
 
@@ -194,6 +193,8 @@ class Autoreloader(bgThread):
         self.logger = logger
         self.options = options
         self.Monitor = monitor_cls or self.Monitor
+        self._monitor = None
+        self._hashes = None
 
     def body(self):
         files = [sys.modules[m].__file__ for m in self.modules]
@@ -224,7 +225,8 @@ class Autoreloader(bgThread):
         self.controller.reload(modules, reload=True)
 
     def stop(self):
-        self._monitor.stop()
+        if self._monitor:
+            self._monitor.stop()
 
     @staticmethod
     def _module_name(path):