我正在将DigitalOcean与Ubuntu 16.04
一起使用,并安装了Django 2.0.5
和Python 3.5
。
这是我的文件结构:
/home/user/
|--project-folder
|--myproject
|--init.py
|--celery.py
|--settings.py
|--tasks.py
|--wsgi.py
|--manage.py
|--requirements.py
|--gunicorn_start(executable)
|--logs
|--run
|-- gunicorn.sock
|--venv(virtual environment)
|--bin
|--lib
我的init.py
文件:
from .celery import app as celery_app
我的celery.py
文件
import os
from celery import Celery
from django.conf import settings
# set the default Django settings module for the 'celery' program.
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings')
app = Celery('myproject')
app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
我的settings.py
文件中的芹菜节
CELERY_RESULT_BACKEND = 'django-db'
CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'
我安装了 Gunicorn ,这是我的 gunicorn_start 文件
#!/bin/bash
NAME="myproject"
DIR=/home/user/project-folder
USER=user
GROUP=user
WORKERS=3
BIND=unix:/home/user/run/gunicorn.sock
DJANGO_SETTINGS_MODULE=myproject.settings
DJANGO_WSGI_MODULE=myproject.wsgi
LOG_LEVEL=error
cd $DIR
source ../venv/bin/activate
export DJANGO_SETTINGS_MODULE=$DJANGO_SETTINGS_MODULE
export PYTHONPATH=$DIR:$PYTHONPATH
exec ../venv/bin/gunicorn ${DJANGO_WSGI_MODULE}:application \
--name $NAME \
--workers $WORKERS \
--user=$USER \
--group=$GROUP \
--bind=$BIND \
--log-level=$LOG_LEVEL \
--log-file=-
我安装了 Supervisor ,这是我的 /etc/supervisor/conf.d/a-name.conf 文件:
[program:myproject]
command=/home/user/gunicorn_start
user=user
autostart=true
autorestart=true
redirect_stderr=true
stdout_logfile=/home/user/logs/gunicorn.log
我使用.delay()
调用任务(电子邮件功能),但没有发送电子邮件,然后在终端上使用以下命令让工作人员运行:
celery -A myproject worker -l info
,所有电子邮件均已发送。
一旦我按下Ctrl-C
或关闭终端,工人就会停止运行。
我的文件设置有问题吗?如果需要其他信息,请告诉我
答案 0 :(得分:0)
就是这样。当您使用 .delay()
调用celery任务时,它将添加到 celery队列。这并不意味着任务正在执行/执行。此任务将由尚未开始的芹菜工作者执行。
因此,当您使用celery -A myproject worker -l info
命令启动celery worker时,它开始从 queue 队列执行任务。
处理芹菜时,首先必须启动芹菜工作者,然后启动gunicorn或django服务器