|  | @@ -16,6 +16,9 @@ class Task(object):
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      All subclasses of :class:`Task` must define the :meth:`run` method,
 | 
	
		
			
				|  |  |      which is the actual method the ``celery`` daemon executes.
 | 
	
		
			
				|  |  | +    The :meth:`run` method must always take the positional keyword arguments
 | 
	
		
			
				|  |  | +    (\*\*kwargs), this is because of the standard arguments always passed to
 | 
	
		
			
				|  |  | +    a task (see :meth:`run` for more info)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      The :meth:`run` method supports both positional, and keyword arguments.
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -137,12 +140,47 @@ class Task(object):
 | 
	
		
			
				|  |  |          return self.run(*args, **kwargs)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      def run(self, *args, **kwargs):
 | 
	
		
			
				|  |  | -        """*REQUIRED* The actual task.
 | 
	
		
			
				|  |  | +        """The body of the task executed by the worker.
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        All subclasses of :class:`Task` must define the run method.
 | 
	
		
			
				|  |  | +        The following standard keyword arguments is passed by the worker:
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        :raises NotImplementedError: by default, so you have to override
 | 
	
		
			
				|  |  | -            this method in your subclass.
 | 
	
		
			
				|  |  | +            * task_id
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                Unique id of the currently executing task.
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            * task_name
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                Name of the currently executing task (same as :attr:`name`)
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            * logfile
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                Name of the worker log file.
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            * loglevel
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                The current loglevel, an integer mapping to one of the
 | 
	
		
			
				|  |  | +                following values: ``logging.DEBUG``, ``logging.INFO``,
 | 
	
		
			
				|  |  | +                ``logging.ERROR``, ``logging.CRITICAL``, ``logging.WARNING``,
 | 
	
		
			
				|  |  | +                ``logging.FATAL``.
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        Additional standard keyword arguments may be added in the future,
 | 
	
		
			
				|  |  | +        so the :meth:`run` method must always take an arbitrary list of
 | 
	
		
			
				|  |  | +        keyword arguments (\*\*kwargs).
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        Example:
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        .. code-block:: python
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            def run(self, x, y): # WRONG!
 | 
	
		
			
				|  |  | +                return x * y
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        Will fail with an exception because the worker can't send the default
 | 
	
		
			
				|  |  | +        arguments. The correct way to define the run method would be:
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        .. code-block:: python
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            def run(self, x, y, **kwargs): # CORRECT!
 | 
	
		
			
				|  |  | +                return x * y
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          """
 | 
	
		
			
				|  |  |          raise NotImplementedError("Tasks must define a run method.")
 |