我使用Django配置Celery。我正在寻找一种运行任务的方法,该任务预计将在运行应用程序的整个周期中执行。这是我使用Celery工作者的情况还是有一些其他选项可以与Django服务器并行启动这么长时间运行的任务?
此外,我希望能够从任务访问数据库并使用supervisord监视它,以防它无法重新启动它。
答案 0 :(得分:0)
您可以按照here的说明将芹菜作为后台作业运行。同样,在部署时,您将必须运行两个Pod(在一个系统celery上运行,在另一个django应用程序上运行),并且必须将其配置为一旦部署了任何内容,便会重新启动。这样,如果您的后台作业正在消耗更多的内存或任何其他内容,则不会影响应用程序。
要与应用程序并行运行任务,可以运行计划作业以检查事件,例如每分钟一次,并在需要时执行。
答案 1 :(得分:0)
我看到两个问题:
django完成启动后如何启动celery任务
请参见下面的点2,但之前请参见0和1。
运行任务,预计将在运行应用程序的整个周期中执行。
怎么没有用例,我看到三种解释:
-0。如何与runserver
或uwsgi,gunicorn,mod_wsgi等一起运行芹菜
您需要对不同的进程运行不同的命令,对于Web服务器进程运行一个命令,对于芹菜工作者运行另一个命令,彼此之间的链接是通过代理进行的,当代理相同时,django向其发送任务,并且芹菜拉扯,使用诸如supervisor之类的流程管理器来管理流程,并使用同一经纪人来使其发言。
在带有supervisor的celery任务上运行,并且您需要一个任务来启动每个请求/响应之后,请使用Request/response signals来与相应的celery @task
装饰器一起调用该函数。
python manage.py runserver
运行到{ {1}}被终止。 (这与点1不同,因为一个python manage.py runserver
负责处理N个请求/响应)。对我来说,这听起来像是长时间缓冲,假设您要测量应用程序运行了多长时间,因为您可能在计算从开始到结束为止的秒数,通常这些情况是通过其他策略来处理的,例如分析应用日志,但是无论如何,您将一直有忙碌的芹菜工作者在运行。通常,这可能是错误的模式,但是用例是用例,因此,Web应用程序的入口点是wsgi文件,出口点是系统的进程python manage.py runserver
信号read this question。
我的意图不是混淆,而是指出这个问题可以用多种方式来解释,无论如何,每种方式都有一个答案。
答案 2 :(得分:0)
在您的supervisord.ini中
[group:yourproject-staging]
programs=yourproject-staging-uwsgi,yourproject-staging-celery
[program:yourproject-staging-uwsgi]
command=/data/www/yourproject-staging/bin/uwsgi --ini /data/www/yourproject-staging/conf/yourproject.staging.uwsgi.ini
user=www-data
autostart=true
autorestart=true
startsecs=5
priority=1100
killasgroup=true
[program:yourproject-staging-celery]
command=/data/www/yourproject-staging/bin/celery -A yourproject worker --loglevel=INFO
directory=/data/www/yourproject-staging
environment=E=staging
user=www-data
autostart=true
autorestart=true
startretries=2
exitcodes=0
stopasgroup=true
killasgroup=true
startsecs=5
priority=850
stdout_logfile=/data/log/yourproject-staging/celery_worker.log
stderr_logfile=/data/log/yourproject-staging/celery_error.log
这将使您的芹菜工作者在登台环境中开始。
不过,请检查您是否已安装Redis,因为我没有安装,并且卡了几个小时。