|  | @@ -0,0 +1,63 @@
 | 
											
												
													
														|  | 
 |  | +=======================
 | 
											
												
													
														|  | 
 |  | + Internals: The worker
 | 
											
												
													
														|  | 
 |  | +=======================
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +**NOTE** This describes the internals of the development version, not the
 | 
											
												
													
														|  | 
 |  | +current release.
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +The worker consists of 4 main components: the broker listener, the scheduler,
 | 
											
												
													
														|  | 
 |  | +the mediator and the task pool. All these components runs in parallel working
 | 
											
												
													
														|  | 
 |  | +with two data structures: the ready queue and the ETA schedule.
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +Data structures
 | 
											
												
													
														|  | 
 |  | +===============
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +ready_queue
 | 
											
												
													
														|  | 
 |  | +-----------
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +The ready queue is either an instance of :class:`Queue.Queue`, or
 | 
											
												
													
														|  | 
 |  | +`celery.buckets.TaskBucket`. The latter if rate limiting is enabled.
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +eta_schedule
 | 
											
												
													
														|  | 
 |  | +------------
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +The ETA schedule is a heap queue sorted by time.
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +Components
 | 
											
												
													
														|  | 
 |  | +==========
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +CarrotListener
 | 
											
												
													
														|  | 
 |  | +--------------
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +Receives messages from the broker using ``carrot``.
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +When a message is received it's converted into a
 | 
											
												
													
														|  | 
 |  | +:class:`celery.worker.job.TaskWrapper` object.
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +Tasks with an ETA are entered into the ``eta_schedule``, messages that can
 | 
											
												
													
														|  | 
 |  | +be immediately processed are moved directly to the ``ready_queue``.
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +ScheduleController
 | 
											
												
													
														|  | 
 |  | +------------------
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +The schedule controller is running the ``eta_schedule``.
 | 
											
												
													
														|  | 
 |  | +If the scheduled tasks eta has passed it is moved to the ``ready_queue``,
 | 
											
												
													
														|  | 
 |  | +otherwise the thread sleeps until the eta is met (remember that the schedule
 | 
											
												
													
														|  | 
 |  | +is sorted by time).
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +Mediator
 | 
											
												
													
														|  | 
 |  | +--------
 | 
											
												
													
														|  | 
 |  | +The mediator simply moves tasks in the ``ready_queue`` over to the
 | 
											
												
													
														|  | 
 |  | +task pool for execution using
 | 
											
												
													
														|  | 
 |  | +:meth:`celery.worker.job.TaskWrapper.execute_using_pool`.
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +TaskPool
 | 
											
												
													
														|  | 
 |  | +--------
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +This is a slightly modified :class:`multiprocessing.Pool`.
 | 
											
												
													
														|  | 
 |  | +It mostly works the same way, except it makes sure all of the workers
 | 
											
												
													
														|  | 
 |  | +are running at all times. If a worker is missing, it replaces
 | 
											
												
													
														|  | 
 |  | +it with a new one.
 |