如何在Django完成启动时启动Celery任务?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (645)

我用Django配置Celery。我正在寻找一种运行任务的方法,该任务预计将在运行应用程序的整个周期中执行。这是我使用Celery工作者的情况还是有一些其他选项与Django服务器并行启动这样长时间运行的任务?

此外,我希望能够从任务访问数据库并使用supervisord监视它,以防它无法重新启动它。

提问于
用户回答回答于

我看到两个问题:

当django完成启动时如何启动芹菜任务

请参见下面的第2点,但在此之前,请参阅0和1。

运行期望在运行应用程序的整个周期中执行的任务。

如何没有用例,我看到三种解释:

-0。如何与runserveruwsgi,gunicorn,mod_wsgi等一起运行芹菜

您需要为不同的进程运行不同的命令,一个用于芹菜工作者的Web服务器进程,另一个用于通过代理的链接,当代理相同时,django向其发送任务并且芹菜拉出,使用像supervisord这样的流程管理器来管理流程,并使用相同的代理来让他们说话。

  1. 如何在django请求/响应周期期间保持芹菜可用于启动任务。

在使用supervisord运行芹菜任务后,您需要在每个请求/响应上启动任务,使用请求/响应信号来调用具有相应芹菜@task装饰器的功能。

  1. 如何在服务请求/响应的主python进程期间保持芹菜任务运行,换句话说,因为python守护进程开始直到它结束,例如,直到运行python manage.py runserver直到python manage.py runserver终止。(这与第1点不同,因为一个人python manage.py runserver负责提供N个请求/响应)。

这听起来像是长池,让我们假设您想要测量应用程序运行的时间,因为您可能正在计算从启动到结束的秒数,通常这些情况是通过分析应用程序日志等其他策略来处理的,但无论如何,如果是这样的话,你将会有一个忙碌的芹菜工人一直在运行。通常这可能是错误的模式,但用例是用例,因此,Web应用程序的入口点是wsgi文件,退出点是系统的进程SIGINT信号,请阅读此问题

我的意图是不要混淆,是指出这个问题能够以多种方式解释,反正每个人都有答案。

用户回答回答于

您可以按照说明运行芹菜后台作业这里。此外,在部署时,您将必须运行两个pod(在一个系统芹菜上运行,在另一个django应用程序上运行),并且必须配置为在部署任何内容后重新启动。这样,如果您的后台作业占用更多内存或任何不应影响应用程序的内容。

为了与您的应用程序并行运行任务,您可以运行一个计划作业来检查事件,比如每分钟,并在需要时完成工作。

扫码关注云+社区

领取腾讯云代金券