【发布时间】:2011-04-21 22:12:40
【问题描述】:
在开发中,运行celeryd 以及 Django 开发服务器有点麻烦。例如,是否可以要求celery 在开发过程中同步运行任务?还是类似的?
【问题讨论】:
在开发中,运行celeryd 以及 Django 开发服务器有点麻烦。例如,是否可以要求celery 在开发过程中同步运行任务?还是类似的?
【问题讨论】:
是的,您可以通过在设置中设置 CELERY_TASK_ALWAYS_EAGER = True 来做到这一点。
(常量以前称为CELERY_ALWAYS_EAGER)
http://docs.celeryproject.org/en/latest/userguide/configuration.html#task-execution-settings
【讨论】:
在编写 Celery 任务 5 年多之后,我注意到我开发的一种模式可以帮助测试和简化开发 - 我意识到如果我的 Celery 任务是我通常使用的常规 Python 函数的薄包装器会更好放入myproject.impl 包。 Celery 任务可能包含一些与 Celery 严格相关的逻辑,例如使用分布式锁定、显式重试逻辑等。
【讨论】:
在 Celery CELERY_ALWAYS_EAGER 的版本 4.0 中,设置在 Django settings.py 中被 CELERY_TASK_ALWAYS_EAGER 替换,或者在 celery conf 中本机的 task_always_eager。
由于 celery 配置从 3.x 版本到 4.x 的众多变化分布在多行,我建议使用内置的设置迁移工具。
celery upgrade settings --django
来源:
幸运的是,您不必手动更改文件,因为 celery 升级设置 --django 程序应该做正确的事情。
http://docs.celeryproject.org/en/latest/whatsnew-4.0.html#step-4-upgrade-to-celery-4-0
【讨论】:
在 django-celery 中还有一个自定义的 Django 测试运行器,它有助于 CELERY_ALWAYS_EAGER。 在the docs 上阅读有关在 Django 中使用 Celery 的更多信息。
【讨论】: