在不运行“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 进行开发?的主要内容,如果未能解决你的问题,请参考以下文章

在不需要使用当前位置的情况下运行资产库代码?

在不运行应用程序的情况下注册后台任务

如何在不使用 CURL 的情况下运行 HTTP 请求

如何在不使用“sh”或“bash”命令的情况下运行 shell 脚本?

在不使用 aws 凭据的情况下连接 Redshift 和 Python(在 emr 上运行)

可以使用推送通知在不通知用户的情况下运行代码吗?