David Wolever
David Wolever

Reputation: 154464

Developing with Django+Celery without running `celeryd`?

In development, it's a bit of a hassle to run the celeryd as well as the Django development server. Is it possible to, for example, ask celery to run tasks synchronously during development? Or something similar?

Upvotes: 29

Views: 10123

Answers (4)

Mark Lavin
Mark Lavin

Reputation: 25164

Yes you can do this by setting CELERY_TASK_ALWAYS_EAGER = True in your settings.
(Constant was previously called CELERY_ALWAYS_EAGER) http://docs.celeryproject.org/en/latest/userguide/configuration.html#task-execution-settings

Upvotes: 46

DejanLekic
DejanLekic

Reputation: 19787

After 5+ years of writing Celery tasks I have noticed a pattern I have developed that can help with testing and ease of development - I realised it is much better if my Celery tasks are thin wrappers around the regular Python functions that I typically put in myproject.impl package. Celery tasks may contain some strictly Celery related logic, like using distributed locking for an example, explicit retry logic, etc.

Upvotes: 0

Oleg Belousov
Oleg Belousov

Reputation: 10121

In version 4.0 of Celery CELERY_ALWAYS_EAGER setting was replaced by CELERY_TASK_ALWAYS_EAGER in Django settings.py or task_always_eager natively in celery conf.

Since the numerous changes in the celery configuration from version 3.x to 4.x are spread over many lines, I suggest to use the built-in settings migration tool.

celery upgrade settings --django

source:

Luckily you don’t have to manually change the files, as the celery upgrade settings --django program should do the right thing.

http://docs.celeryproject.org/en/latest/whatsnew-4.0.html#step-4-upgrade-to-celery-4-0

Upvotes: 5

tobych
tobych

Reputation: 2961

There's also a custom Django test runner in django-celery that helps with CELERY_ALWAYS_EAGER. Read more about using Celery with Django on the docs.

Upvotes: 7

Related Questions