理论加实战
实战
centos7下python3.6
pip3 install supervisor,Celery
supervisor是后台执行
为了shell终端输入celery就可以用必须执行下面命令,要先找到celery安装在哪里 pip安装的一定在python安装目录的bin下面
装好后 ln-s /usr/local/python3/bin/celery /usr/bin/celery
flower是异步任务可视化, rabbitmq的配置网上也有很多
我列一下最关键的几步
1.rabbitmq命令
2.supervisor配置文件 flower的重启需要你杀掉进程再起
3.clelery全局配置
效果
4个异步任务
django中配置
rom celery import Celery
from django.conf import settings
from django.core.mail import send_mail
import logging,os,django
#创建对象
app=Celery('celery_task',broker='redis://:redis密码@redis地址:端口号/哪个库')
举例
有密码版
redis://:[email protected]:9000/8
无密码版
redis://192.168.4.33:9000/8
logger=logging.getLogger('django')
#初始化django配置文件
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "dailyfresh.settings")
django.setup()
#定义发邮件任务函数
#定义任务函数需要传进来三个参数
@app.task固定写法
def send_emils(to_emil,username,token):
"""发送激活邮件"""
# logger.error([to_emil,username,token])
subject = '邮件主题'
sender = settings.EMAIL_FROM
receiver = [to_emil]
message = ''
html_message = '<h1>%s欢迎您</h1>请点击以下链接激活<br/><a href="http://127.0.0.1:8000/user/active/%s">http://127.0.0.1:8000/user/active/%s</a>' % (
username, token, token)
send_mail(subject, message, sender, receiver, html_message=html_message)
#外部调用
from celery_tasks.tasks import send_emils
# 可以用celery异步发送邮件,原本发送邮件是阻塞的
send_emils.delay(email,username,token)
上面搞好后执行
0.mkdir /etc/supervisord/
- echo_supervisord_conf > /etc/supervisord.conf
- vim /etc/supervisord/supervisord.conf
- 大写GG按两下在按下字母o 将以下粘贴进去
[program:celeryd]
:这个路径是你写了任务函数的上一层目录
directory=/etc/my_object/daydayshop/dailyfresh
command=celery -A celery_tasks.tasks worker -l info
stdout_logfile=/var/log/celeryd.log
stderr_logfile=/var/log/celeryd.log
autostart=true
autorestart=true
startsecs=10
stopwaitsecs=600
然后esc x保存退出
执行supervisord -c /etc/supervisord/supervisord.conf
然后tail -5 /var/log/celeryd.log
[2019-04-18 08:44:14,891: INFO/MainProcess] Connected to redis 你配置的redis
[2019-04-18 08:44:14,958: INFO/MainProcess] mingle: searching for neighbors
[2019-04-18 08:44:16,027: INFO/MainProcess] mingle: all alone
[2019-04-18 08:44:16,110: INFO/MainProcess] celery@你的主机名 ready.
supervisorctl -c /etc/supervisord/supervisord.conf start celeryd
启动
理论部分
定时任务
如果我们想某日某时执行某个任务,或者每隔一段时间执行某个任务,也可以使用celery来完成. 使用定时任务,需要安装额外包:
pip install django_celery_beat
首先在settings.py中安装此应用:
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.m