我正在尝试在数字海洋上的ubuntu 14.04服务器上部署django应用程序。
我知道芹菜是用于异步任务的。用户做某事,而不是等待昂贵的任务执行,他们可以转到网站的另一个部分。Celery 通过使用 redis 或其他消息代理来执行此操作。它创建一个队列,工作线程执行队列上的任务。我正在尝试使用它来减少 api 调用对用户体验的侵入性。
当我将其部署到生产中时,我对芹菜的所有东西"生活"在哪里感到非常困惑。我看到过一些帖子说我可以通过管理页面对芹菜做任何我想做的事情,而其他帖子则制作了一个启动芹菜的主管文件。当我尝试制作主管文件时,我在"/home/django/django_project/venv/bin/celery"处收到一个错误命令,该命令不可执行。
关于通过管理页面管理芹菜,我不确定如何创建和管理芹菜工人和队列。我想通过那里安排任务,但总的来说非常困惑。
我将不胜感激任何人澄清这一点。 谢谢
更新:芹菜节拍是我选择的。当我执行时:
celery -A <proj> beat -l info -S django
这种情况会发生:
[2017-07-13 22:31:51,051: INFO/MainProcess] beat: Starting...
[2017-07-13 22:31:51,052: INFO/MainProcess] Writing entries...
[2017-07-13 22:31:51,107: INFO/MainProcess] Scheduler: Sending due task does it work!? (does_celery_work)
[2017-07-13 22:31:51,134: INFO/MainProcess] Writing entries...
[2017-07-13 22:32:21,094: INFO/MainProcess] Scheduler: Sending due task does it work!? (does_celery_work)
[2017-07-13 22:32:51,095: INFO/MainProcess] Scheduler: Sending due task does it work!? (does_celery_work)
太酷了!但是任务没有执行。这是一个 twilio 任务,每 30 秒发送一个电话号码,以证明芹菜计划任务正在工作。 当我ping它时,redis服务器工作正常,我什至仔细检查它是否在正确的端口上并ping了该端口。 那么,你会让芹菜自动工作并确保它有效吗?
你试过 http://flower.readthedocs.io/en/latest/吗? 它将帮助您查看工作线程是否正确设置并查看您的任务。
我找到了一个姜戈芹菜红 https://gitlab.com/harveydf-tutorials/django-celery-realtime 的很好的例子
希望这些对您有所帮助。
如果将来有人偶然发现这篇文章,这是我如何配置芹菜从 django 管理员运行:
在 supervisor/conf.d/celery.conf 中创建主管 conf 文件 对于命令,我只是将芹菜,而不是在我的虚拟环境中放置芹菜二进制文件的路径。我不知道为什么会这样,但它确实如此。
我会为节拍和花做同样的事情。
[program:celery]
command=celery -A proj worker --loglevel=INFO
directory=/home/django/django_project
user=root
numprocs=1
stdout_logfile=/home/django/django_project/logs/celery-worker.log
stderr_logfile=/home/django/django_project/logs/celery-worker.log
autostart=true
autorestart=true
startsecs=10
; Need to wait for currently executing tasks to finish at shutdown.
; Increase this if you have very long running tasks.
stopwaitsecs=600
; When resorting to send SIGKILL to the program to terminate it
; send SIGKILL to its whole process group instead,
; taking care of its children as well.
killasgroup=true
; if rabbitmq is supervised, set its priority higher
; so it starts first
priority=998