我有一个项目“ A” (Django),我想在其中生成要发送给Celery经纪人的消息,例如 Redis 。
在另一个项目“ B” (同一台计算机上的纯python)中,我想启动一个Celery服务器工作程序,以监视代理中的消息并执行任务。任务在B中定义。
任务完成后,会将结果保存在redis中(也用作结果后端)。
准备好回复后,我希望django知道。
这可能吗?
我主要担心的是A不应从B导入任务,所以我应该使用类似send_task('task_name')
的东西。
在实践中,我应该创建2个独立的celery实例,但仅运行服务器工作程序?
此体系结构正确还是我缺少什么?
答案 0 :(得分:0)
这可能吗?
您所要求的一切都是可能的,除了:
准备好回复后,我希望django知道。
Celery响应存储在Redis中,而django不会
另行通知。您应该轮询结果
使用AsyncResult
来确定任务是否完成以及
结果是什么。
实际上,您可以运行任意数量的芹菜工人。 芹菜的目的是让您分配工作量 跨尽可能多的服务器和进程。为您 体系结构,是的,您只需要运行(最少)一个芹菜 工人。
在生产者(django)中,您实例化与 芹菜经纪人使用以下代码段:
from celery.app import Celery
app = Celery(broker_url='redis://....')
app.send_task(...)
在您的消费者(芹菜)中按建议定义Celery实例 在芹菜文档中。