|  |  | @ -257,6 +257,12 @@ class Worker(object): | 
			
		
	
		
		
			
				
					
					|  |  |  |             p.expire(self.key, 60) |  |  |  |             p.expire(self.key, 60) | 
			
		
	
		
		
			
				
					
					|  |  |  |             p.execute() |  |  |  |             p.execute() | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     def set_warm_shutdown_requested_date(self): | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         """Sets the date on which the worker received a warm shutdown request""" | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         with self.connection._pipeline() as p: | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             p.hset(self.key, 'warm_shutdown_requested_at', utcformat(utcnow())) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             p.execute() | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     @property |  |  |  |     @property | 
			
		
	
		
		
			
				
					
					|  |  |  |     def birth_date(self): |  |  |  |     def birth_date(self): | 
			
		
	
		
		
			
				
					
					|  |  |  |         """Fetches birth date from Redis.""" |  |  |  |         """Fetches birth date from Redis.""" | 
			
		
	
	
		
		
			
				
					|  |  | @ -264,6 +270,13 @@ class Worker(object): | 
			
		
	
		
		
			
				
					
					|  |  |  |         if birth_timestamp is not None: |  |  |  |         if birth_timestamp is not None: | 
			
		
	
		
		
			
				
					
					|  |  |  |             return utcparse(as_text(birth_timestamp)) |  |  |  |             return utcparse(as_text(birth_timestamp)) | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     @property | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     def warm_shutdown_requested_date(self): | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         """Fetches warm_shutdown_requested_date from Redis.""" | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         warm_shutdown_requested_timestamp = self.connection.hget(self.key, 'warm_shutdown_requested_at') | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         if warm_shutdown_requested_timestamp is not None: | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             return utcparse(as_text(warm_shutdown_requested_timestamp)) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     @property |  |  |  |     @property | 
			
		
	
		
		
			
				
					
					|  |  |  |     def death_date(self): |  |  |  |     def death_date(self): | 
			
		
	
		
		
			
				
					
					|  |  |  |         """Fetches death date from Redis.""" |  |  |  |         """Fetches death date from Redis.""" | 
			
		
	
	
		
		
			
				
					|  |  | @ -357,9 +370,10 @@ class Worker(object): | 
			
		
	
		
		
			
				
					
					|  |  |  |         self.log.warning(msg) |  |  |  |         self.log.warning(msg) | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |         # If shutdown is requested in the middle of a job, wait until |  |  |  |         # If shutdown is requested in the middle of a job, wait until | 
			
		
	
		
		
			
				
					
					|  |  |  |         # finish before shutting down |  |  |  |         # finish before shutting down and save the request in redis | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |         if self.get_state() == 'busy': |  |  |  |         if self.get_state() == 'busy': | 
			
		
	
		
		
			
				
					
					|  |  |  |             self._stop_requested = True |  |  |  |             self._stop_requested = True | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             self.set_warm_shutdown_requested_date() | 
			
		
	
		
		
			
				
					
					|  |  |  |             self.log.debug('Stopping after current horse is finished. ' |  |  |  |             self.log.debug('Stopping after current horse is finished. ' | 
			
		
	
		
		
			
				
					
					|  |  |  |                            'Press Ctrl+C again for a cold shutdown.') |  |  |  |                            'Press Ctrl+C again for a cold shutdown.') | 
			
		
	
		
		
			
				
					
					|  |  |  |         else: |  |  |  |         else: | 
			
		
	
	
		
		
			
				
					|  |  | 
 |