Parcourir la source

Cancel the timer2 timer applied by the camera base class.

Ask Solem il y a 14 ans
Parent
commit
352c3df060
1 fichiers modifiés avec 14 ajouts et 1 suppressions
  1. 14 1
      celery/events/snapshot.py

+ 14 - 1
celery/events/snapshot.py

@@ -6,6 +6,7 @@ from celery.utils.dispatch import Signal
 
 
 class Polaroid(object):
+    _tref = None
     shutter_signal = Signal(providing_args=("state", ))
 
     def __init__(self, state, freq=1.0, verbose=False):
@@ -14,7 +15,7 @@ class Polaroid(object):
         self.verbose = verbose
 
     def install(self):
-        timer2.apply_interval(self.freq * 1000.0, self.capture)
+        self._tref = timer2.apply_interval(self.freq * 1000.0, self.capture)
 
     def on_shutter(self, state):
         pass
@@ -29,3 +30,15 @@ class Polaroid(object):
 
     def capture(self):
         return self.state.freeze_while(self.shutter)
+
+    def cancel(self):
+        if self._tref:
+            self._tref()
+            self._tref.cancel()
+
+    def __enter__(self):
+        self.install()
+        return self
+
+    def __exit__(self, *exc_info):
+        self.cancel()