ple*_*unt 5 python django message-queue celery django-celery
我尝试阅读官方文档以及其他 SO 线程,但仍然不清楚 Celery 是如何工作的。
据我了解:
@shared_task装饰器函数定义要执行的工作。那么,最紧迫的问题是:
Celery Worker如何获取@shared_task中定义的代码来运行任务?
基本上,如果 3. 仅使用消息代理进行连接,如何获取 1. 中定义的内容?python 代码是否以字符串形式存储在消息代理中?消息代理项目/记录的数据结构是什么?
在花了一些时间并实际实施 Celery 之后,我能够弄清楚到底发生了什么。这可能是我自己的学习方式的一个缺点,或者文档忽略了它,无论哪种方式,我想把它留在这里,以防其他人也有同样的疑问。
在我看来,以下内容完全不明显:
Django 应用程序:Celery 任务在此处定义。它已安装 Celery 作为依赖项。
消息代理:消息代理从 1. 获取此任务并将其排队。
Celery Worker:这实际上不是一个仅包含 Celery 的单独的 python 应用程序。这是1.. 的完整实例。因此,您启动 Django两次,一次是生成任务,另一次是处理任务。两者都包含相同的@shared_task功能。
文档应解释的注意事项:
@shared_task函数的过时版本。celery -A "your_app" workers -l INFO. 它没有运行 Gunicorn,但仍然包含 1 中的所有代码。我认为在介绍 Celery 时,他们应该立即解释生产者和工作实例都包含您的源代码。