Celery主要只是像RabbitMQ这样的消息队列的高级接口吗?我正在尝试建立一个系统,其中有多个预定的工作人员执行并发的http请求,但我不确定是否需要其中任何一个。我想知道的另一个问题是,如果我使用Celery或RabbitMQ,你在哪里编写代码中的实际任务,以便工人完成?
答案 0 :(得分:2)
RabbitMQ确实是一个消息队列,Celery使用它来向工作人员发送消息和从工作人员发送消息。 Celery不仅仅是RabbitMQ的接口。 Celery是您用来创建工作人员,启动任务和定义任务的方法。听起来你的用例对Celery / RabbitMQ有意义。您可以使用@app.task
装饰器创建任务。查看docs了解详情。在以前的项目中,我为芹菜建立了一个模块,在那里我定义了我需要的任何任务。然后,您可以从其他模块中提取函数以用于您的任务。
答案 1 :(得分:1)
Celery是任务管理框架 - 用于计划作业的API,启动这些作业的代码,用于监控正在发生的事情的管理工具(例如Flower)。
RabbitMQ是Celery的几个“后端”之一。说Celery是RabbitMQ的高级接口,这简直太简单了。实际上,Celery不需要RabbitMQ来运行并正常工作。但是,在实践中,它们通常是成对的,Celery是一种更高级别的方法,只需使用RabbitMQ(或其他队列或消息传递后端)即可完成较低级别的操作。