在不运行“celeryd”的情况下使用 Django+Celery 进行开发?
Posted
技术标签:
【中文标题】在不运行“celeryd”的情况下使用 Django+Celery 进行开发?【英文标题】:Developing with Django+Celery without running `celeryd`? 【发布时间】:2011-04-21 22:12:40 【问题描述】:在开发中,运行celeryd
以及 Django 开发服务器有点麻烦。例如,是否可以要求celery
在开发过程中同步运行任务?还是类似的?
【问题讨论】:
【参考方案1】:是的,您可以通过在设置中设置 CELERY_TASK_ALWAYS_EAGER = True
来做到这一点。
(常量以前称为CELERY_ALWAYS_EAGER
)
http://docs.celeryproject.org/en/latest/userguide/configuration.html#task-execution-settings
【讨论】:
这种方法有时非常缓慢。有任何已知问题吗? 很可能它很慢,因为它同步运行任务(根据需要)并且它们很慢。 链接失效 修复链接:docs.celeryproject.org/en/latest/userguide/…【参考方案2】:在编写 Celery 任务 5 年多之后,我注意到我开发的一种模式可以帮助测试和简化开发 - 我意识到如果我的 Celery 任务是我通常使用的常规 Python 函数的薄包装器会更好放入myproject.impl
包。 Celery 任务可能包含一些与 Celery 严格相关的逻辑,例如使用分布式锁定、显式重试逻辑等。
【讨论】:
【参考方案3】:在 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
【讨论】:
【参考方案4】:在 django-celery 中还有一个自定义的 Django 测试运行器,它有助于 CELERY_ALWAYS_EAGER。 在the docs 上阅读有关在 Django 中使用 Celery 的更多信息。
【讨论】:
链接已损坏:celery.readthedocs.org/en/latest/… 链接又被破坏了。以上是关于在不运行“celeryd”的情况下使用 Django+Celery 进行开发?的主要内容,如果未能解决你的问题,请参考以下文章
如何在不使用“sh”或“bash”命令的情况下运行 shell 脚本?