首页 > 解决方案 > Django & Celery - 跨多个方法和文件发送信号

问题描述

问题

我有一个 Django + Celery 应用程序,并试图获得一个冗长的方法来在 Celery 任务中运行。

目标

我想要

1)将一整行执行 - 跨多个类和文件调用 - 放入芹菜任务中。同时,该应用程序应继续为用户提供服务。

2)当 Celery 任务完成时发回信号,以便我可以更新 UI。

问题

尽管搜索了文档、示例和帮助站点,但我无法使其正常工作。

我不知道要使用哪些信号,如何注册它们,如何编写相关的方法来正确接收这些信号,并在完成后做出响应。

从 Celery 文档中我不清楚如何完成所有这些:有很多很多可用的信号和装饰器,但很少说明哪些信号和装饰器适合这一系列事件。

请求帮助

任何一个

  1. 指向一些可以提供帮助的资源(更好的文档、指向适合我用例的示例的链接等),

或者

  1. 关于哪些信号适合使用、在哪里使用以及为什么使用的一些第一手帮助。

这是我在 StackOverflow 上的第一篇文章,所以提前感谢您的善意和耐心。



所需的执行路径:

1) views.py : 通过 GET 或 POST 获取输入

SomeMethod:向 TaskManager 中的 staticmethod 发送信号(位于 TaskManager.py 中)以使用参数启动任务


2)TaskManager.py:处理信号,跟踪正在运行的任务

SignalProcessor:接收信号,从 kwargs 中提取参数,在 tasks.py 中调用适当的方法。

任务列表:记下任务列表中的任务,以便我知道它正在运行以及在哪里运行。


3) 任务.py

@shared_task HandleTheTask(arg1, arg2):


4) 任务管理器.py

SignalProcessor:接收task_complete信号,从TaskList中移除相应的任务。




我已经尝试过的

我试过从SignalProcessor方法调用HandleTheTask.delay(arg1, arg2) 。

结果:什么都没有发生。该应用程序继续执行,但冗长的任务不会。Celery 没有注意到这个调用并且从不执​​行它。

这可能是因为我要运行的方法在另一个进程中?


结果:如上。



我咨询过的资源

我已经看过一堆文档和帮助网站。以下是我咨询过的一些资源:

欢迎任何帮助。谢谢!

标签: pythondjangocelerysignals

解决方案


推荐阅读