|  | @@ -73,6 +73,9 @@ class Celery(object):
 | 
	
		
			
				|  |  |          self.registry_cls = symbol_by_name(self.registry_cls)
 | 
	
		
			
				|  |  |          self.accept_magic_kwargs = accept_magic_kwargs
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +        self.configured = False
 | 
	
		
			
				|  |  | +        self._pending_defaults = deque()
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |          self.finalized = False
 | 
	
		
			
				|  |  |          self._finalize_mutex = Lock()
 | 
	
		
			
				|  |  |          self._pending = deque()
 | 
	
	
		
			
				|  | @@ -158,11 +161,18 @@ class Celery(object):
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |                  pending = self._pending
 | 
	
		
			
				|  |  |                  while pending:
 | 
	
		
			
				|  |  | -                    maybe_evaluate(pending.pop())
 | 
	
		
			
				|  |  | +                    maybe_evaluate(pending.popleft())
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |                  for task in self._tasks.itervalues():
 | 
	
		
			
				|  |  |                      task.bind(self)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +    def add_defaults(self, fun):
 | 
	
		
			
				|  |  | +        if not callable(fun):
 | 
	
		
			
				|  |  | +            d, fun = fun, lambda: d
 | 
	
		
			
				|  |  | +        if self.configured:
 | 
	
		
			
				|  |  | +            return self.conf.add_defaults(fun())
 | 
	
		
			
				|  |  | +        self._pending_defaults.append(fun)
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |      def config_from_object(self, obj, silent=False):
 | 
	
		
			
				|  |  |          del(self.conf)
 | 
	
		
			
				|  |  |          return self.loader.config_from_object(obj, silent=silent)
 | 
	
	
		
			
				|  | @@ -297,8 +307,14 @@ class Celery(object):
 | 
	
		
			
				|  |  |          return backend(app=self, url=url)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      def _get_config(self):
 | 
	
		
			
				|  |  | +        self.configured = True
 | 
	
		
			
				|  |  |          s = Settings({}, [self.prepare_config(self.loader.conf),
 | 
	
		
			
				|  |  |                               deepcopy(DEFAULTS)])
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        # load lazy config dict initializers.
 | 
	
		
			
				|  |  | +        pending = self._pending_defaults
 | 
	
		
			
				|  |  | +        while pending:
 | 
	
		
			
				|  |  | +            s.add_defaults(pending.popleft()())
 | 
	
		
			
				|  |  |          if self._preconf:
 | 
	
		
			
				|  |  |              for key, value in self._preconf.iteritems():
 | 
	
		
			
				|  |  |                  setattr(s, key, value)
 |