【发布时间】:2017-07-27 01:34:18
【问题描述】:
Celery 似乎是一个很棒的工具,但我很难理解各种 Celery 组件如何协同工作:
- 工人
- 应用程序
- 任务
- 消息代理(如 RabbitMQ)
据我了解,命令行:
celery -A not-clear-what-this-option-is worker
应该运行某种芹菜“工作服务器”,它本身需要连接到代理服务器(我不太确定为什么需要这么多服务器)。
然后在任何 python 代码中,可能会通过实例化应用程序将某些任务发送给工作人员:
app = Celery('my_module', broker='pyamqp://guest@localhost//')
然后通过以下方式使用此应用程序装饰功能:
@app.tasks
def my_func():
...
现在可以将“my_func()”称为“my_func.delay()”以异步方式运行。
这是我的问题:
- 调用 my_func.delay() 时会发生什么?哪个服务器先与哪个对话?并将什么发送到哪里?
- celery 命令的“-A”后面的选项是什么?这真的需要吗?
- 假设我有一个进程 X,它实例化一个 Celery 应用程序来启动任务 A,并假设我有另一个进程 Y 想知道 X 启动的任务 A 的状态。我假设 Y 有办法做所以,但我不知道如何。我想 Y 应该创建自己的 Celery 应用程序实例。但是之后:
- 在 Y 的 celery 应用程序中调用什么函数来获取此信息(以及进程 Y 中任务 A 的“标识符”是什么)?
- 这在通信方面是如何工作的,即请求什么时候通过 Broker,什么时候到达 worker?
如果有人能提供有关这些问题的一些信息,我将不胜感激。我打算在 Django 项目中使用 Celery,其中对服务器的一些请求可能会触发各种耗时的任务,和/或查询之前启动的任务的状态(待处理、已完成、错误等)。
【问题讨论】:
-
因为这已经 +3 年了,你可能已经想出了自己的答案,但我认为留下一些答案很重要
标签: python celery django-celery celery-task