12

I have a task which needs to be launched when Celery starts. This tasks is next runned every 5 minutes through a callback / eta.

I find some threads about it but nothing which seems to work on Celery 3.

Thanks for your help, Arnaud.

arnaud.breton
  • 2,054
  • 1
  • 24
  • 39

2 Answers2

23

Someone on the Celery's IRC channel give me the right way to do that by using the "worker_ready.connect" signal: http://docs.celeryproject.org/en/latest/userguide/signals.html#worker-ready

from celery.signals import worker_ready

@worker_ready.connect
def at_start(sender, **k):
    with sender.app.connection() as conn:
         sender.app.send_task('app.modules.task', args,connection=conn, ...)

It works like a charm now!

Mathieu Rollet
  • 2,016
  • 2
  • 18
  • 31
arnaud.breton
  • 2,054
  • 1
  • 24
  • 39
0

You need to define in the settings:

import djcelery
djcelery.setup_loader()
CELERY_IMPORTS = ("apps.app_name.module.tasks",)

Also if you dont have instaled celery broker you should install one I am using RabbitMQ, very good tutorial for how to use it you have in the celery documentation:

http://docs.celeryproject.org/en/latest/getting-started/brokers/rabbitmq.html

And then start from command line celery demon:

django-admin.py celeryd -v 2 -B -s celery -E -l INFO

UnLiMiTeD
  • 1,000
  • 1
  • 9
  • 17
  • Hi, thanks for the answer but I don't think it's what I'm looking for. CELERY_IMPORTS settings lets you define customs modules to import (if you didn't put your tasks in tasks.py). What I'm looking for is a way to automatically start a specific task when the deamon is starting. Next the callback / ETA system is doing the rest. Thanks for your help. – arnaud.breton Jan 29 '13 at 17:41