|  | @@ -3,6 +3,8 @@
 | 
	
		
			
				|  |  |  Process Pools.
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  """
 | 
	
		
			
				|  |  | +import traceback
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  from time import sleep, time
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  from celery import log
 | 
	
	
		
			
				|  | @@ -136,9 +138,20 @@ class TaskPool(object):
 | 
	
		
			
				|  |  |              if isinstance(ret_value.exception, (
 | 
	
		
			
				|  |  |                      SystemExit, KeyboardInterrupt)):
 | 
	
		
			
				|  |  |                  raise ret_value.exception
 | 
	
		
			
				|  |  | -            [errback(ret_value) for errback in errbacks]
 | 
	
		
			
				|  |  | +            [self.safe_apply_callback(errback, ret_value)
 | 
	
		
			
				|  |  | +                    for errback in errbacks]
 | 
	
		
			
				|  |  |          else:
 | 
	
		
			
				|  |  | -            [callback(ret_value) for callback in callbacks]
 | 
	
		
			
				|  |  | +            [self.safe_apply_callback(callback, ret_value)
 | 
	
		
			
				|  |  | +                    for callback in callbacks]
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    def safe_apply_callback(self, fun, *args):
 | 
	
		
			
				|  |  | +        try:
 | 
	
		
			
				|  |  | +            fun(*args)
 | 
	
		
			
				|  |  | +        except:
 | 
	
		
			
				|  |  | +            self.logger.error("Pool callback raised exception: %s" % (
 | 
	
		
			
				|  |  | +                traceback.format_exc(), ))
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      @property
 | 
	
		
			
				|  |  |      def info(self):
 |