|  | @@ -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()
 |