Django + celery +redis使用
1.安装包
pip install celery pip install django-celery pip install pymysql
2.创建一个django项目
- proj/
- proj/__init__.py
- proj/settings.py
- proj/urls.py
- manage.py
3.修改__init__.py
import pymysql
pymysql.install_as_MySQLdb()
4.修改settings.py,加celery配置
# 是否启用celery任务
IS_USE_CELERY = True
# 本地开发的 celery 的消息队列(RabbitMQ)信息
# BROKER_URL_DEV = 'amqp://guest:guest@127.0.0.1:5672/'
BROKER_URL_DEV = 'redis://127.0.0.1:6379/1'
# TOCHANGE 调用celery任务的文件路径, List of modules to import when celery starts.
CELERY_IMPORTS = (
'celerytest.task',
)
# ===============================================================================
# CELERY 配置
# ===============================================================================
if IS_USE_CELERY:
try:
import djcelery
import sys
INSTALLED_APPS += (
'djcelery', # djcelery
)
djcelery.setup_loader()
CELERY_ENABLE_UTC = False
CELERYBEAT_SCHEDULER = "djcelery.schedulers.DatabaseScheduler"
if "celery" in sys.argv:
DEBUG = False
# celery 的消息队列(redis)信息
BROKER_URL = os.environ.get('BK_BROKER_URL', BROKER_URL_DEV)
#BROKER_URL = 'amqp://guest:guest@127.0.0.1:5672/' except:
pass
5.修改settings.py,改数据库配置
# ===============================================================================
# 数据库设置, 本地开发数据库设置
# ===============================================================================
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql', # 默认用mysql
'NAME': 'celerytest', # 数据库名 (默认与APP_ID相同)
'USER': 'root', # 你的数据库user
'PASSWORD': '', # 你的数据库password
'HOST': '127.0.0.1', # 开发的时候,使用localhost
'PORT': '', # 默认3306
},
}
6.修改urls.py,添加链接
from django.conf.urls import include, url
from django.contrib import admin
import test
urlpatterns = [
url(r'^admin/', include(admin.site.urls)),
url(r'^aa/$', test.test),
url(r'^add/$', test.addtest),
url(r'^del/$', test.deltest),
url(r'^tt/$', test.startandstop),
]
7.添加task.py,celery任务
# -*- coding: utf-8 -*-
import django #测试不加如这两行启动worker要报错,而且需要加在最前
django.setup() import time
from celery import task,shared_task #直接执行
@task()
def sayhello():
print('hello ...')
time.sleep(2)
print('world ...') #定时任务
@shared_task(name="celerytest")
def everysay(**kwargs):
"""定时任务调用执行作业"""
sayadd(**kwargs) def sayadd(**kwargs):
print('add1 ...')
time.sleep(2)
print(int(kwargs['x'])+int(kwargs['y']))
8.添加test.py,调用任务
# -*- coding: utf-8 -*-
from django.shortcuts import render,HttpResponse
from task import *
from djcelery import models as djmodels
import json
def getcrontabtime(minute,hour,day_of_month,month_of_year,day_of_week):
mycrontab = {}
mycrontab['minute'] = minute
mycrontab['hour'] = hour
mycrontab['day_of_month'] = day_of_month
mycrontab['month_of_year'] = month_of_year
mycrontab['day_of_week'] = day_of_week
return mycrontab def test(request):
sayhello.delay()#如果有参数sayhello.delay(x,y,z)
return HttpResponse("hello world") def addtest(request):
'''添加定时任务'''
task, created = djmodels.PeriodicTask.objects.get_or_create(name='', task='celerytest') #task对应的是task文件里的函数方法
mycrontab = getcrontabtime(5,'*','*','*','*')
crontab = djmodels.CrontabSchedule.objects.filter(**mycrontab).first()
if crontab is None:
crontab = djmodels.CrontabSchedule.objects.create(**mycrontab)
task.crontab = crontab
task.enabled = True
param_dic = {}
param_dic['x'] = 5
param_dic['y'] = 2
# print param_dic
# if type(param_dic) == list:
# task.args = param_dic
if type(param_dic) == dict:
task.kwargs = json.dumps(param_dic)
task.save()
return HttpResponse("添加任务") def deltest(request):
'''删除定时任务'''
try:
djmodels.PeriodicTask.objects.filter(name='').delete()
except:
return HttpResponse("删除定时任务失败")
return HttpResponse("删除定时任务成功") def startandstop(request):
'''启停定时作业'''
status = request.GET.get('status','')
task, created = djmodels.PeriodicTask.objects.get_or_create(name='', task='celerytest')
if status == '':
task.enabled = False
task.save()
return HttpResponse("停用成功")
elif status == '':
task.enabled = True
task.save()
return HttpResponse("启用成功")
else:
return HttpResponse("系统错误")
9.项目架构

10.运行前准备
#配置数据库迁移,生成celery需要的数据表
python manage.py migrate
#启动Redis
sudo redis-server /etc/redis/redis.conf
#启动worker
python manage.py celery worker --loglevel=info
#启动心跳
python manage.py celery beat --max-interval=10 --loglevel=INFO
--max-interval=10 :每十秒侦测一次任务 --loglevel=INFO:日志等级是INFO
11.启动测试
#启动web
python manage.py runserver 0.0.0.0:9999
#直接执行
http://127.0.0.1:9999/aa/
#添加定时服务
http://127.0.0.1:9999/add/
#删除定时服务
http://127.0.0.1:9999/add/
#暂停执行定时服务
http://127.0.0.1:9999/tt/
http://127.0.0.1:9999/tt/?status=0
#启动执行定时服务
http://127.0.0.1:9999/tt/?status=1
Django + celery +redis使用的更多相关文章
- django+celery+redis环境搭建
初次尝试搭建django+celery+redis环境,记录下来,慢慢学习~ 1.安装apache 下载httpd-2.0.63.tar.gz,解压tar zxvf httpd-2.0.63.tar. ...
- django celery redis 定时任务
0.目的 在开发项目中,经常有一些操作时间比较长(生产环境中超过了nginx的timeout时间),或者是间隔一段时间就要执行的任务. 在这种情况下,使用celery就是一个很好的选择. cele ...
- django+celery+redis实现运行定时任务
0.目的 在开发项目中,经常有一些操作时间比较长(生产环境中超过了nginx的timeout时间),或者是间隔一段时间就要执行的任务. 在这种情况下,使用celery就是一个很好的选择. cele ...
- Django+Celery+redis kombu.exceptions.EncodeError:Object of type is not JSON serializable报错
在本文中例子中遇到问题的各种开发版本如下: Python3.6.8 Django==2.2 celery==4.4.0 kombu==4.6.7 redis==3.3.0 大概的报错如下截图: 是在开 ...
- django celery redis简单测试
希望在下一版中,能用这个小芹菜,来实现异步的多任务并行哈. 安装REDIS之类的不表,只说在DJANGO当中要注意配置的事项. 0,安装插件 yum install redis-server pip ...
- python用Django+Celery+Redis 监视程序(一)
C盘创建一个目录就叫DjangoDemo,然后开始在该目录下操作. 1.新建Django工程与应用 运行pip install django 安装django 这里我们建一个名为demo的项目和hom ...
- 使用django + celery + redis 异步发送邮件
参考:http://blog.csdn.net/Ricky110/article/details/77205291 环境: centos7 + python3.6.1 + django2.0.1 ...
- Django+Celery+Redis实现异步任务(发送邮件)
安装如下依赖库 pip install Celery pip install django-celery pip install django-redis 还要安装本地的Redis服务 setting ...
- Django Celery Redis 异步执行任务demo实例
一.windows中安装redis 安装过程见 <在windows x64上部署使用Redis> 二.环境准备 requirements.txt Django==1.10.5 celery ...
- django+celery+redis环境配置
celery是python开发的分布式任务调度模块 Celery本身不含消息服务,它使用第三方消息服务来传递任务,目前,celery支持的消息服务有RabbitMQ,redis甚至是数据库,redis ...
随机推荐
- 让nginx 的ssi支持include相对路径
好久没接触nginx了,今天帮同事解决一个客户的问题,顺便记录下:version : nginx-1.6.2问题描述:客户的files.shtml里面include一个网站的头部文件( <!–# ...
- mysql数据库为什么要分表和分区?
一般下载的源码都带了MySQL数据库的,做个真正意义上的网站没数据库肯定不行. 数据库主要存放用户信息(注册用户名密码,分组,等级等),配置信息(管理权限配置,模板配置等),内容链接(html ,图片 ...
- C#编程 socket编程之TcpClient,TcpListener,UdpClient
应用程序可以通过 TCPClient.TCPListener 和 UDPClient 类使用传输控制协议 (TCP) 和用户数据文报协议 (UDP) 服务.这些协议类建立在 System.Net.So ...
- 客户端数据存储cookie、localStoeage、sessionStorage(小记)
一.数据存储分为客户端存储和服务端存储 1.而对于客户端存储,在html5以前只能通过cookie来实现:html 5以后增加了web存储(实际保存本地)的功能 (1)对于web存储有两个标准: ...
- Vue 2019开发者图谱
作为 Vue 的初学者,您或许已经听过很多关于它的专业术语了,例如:单页面应用程序.异步组件.服务器端呈现等,您可能还听过和Vue经常一起被提到的工具和库,如Vuex.Webpack.Vue CLI和 ...
- python接口自动化-重定向(Location)
一.重定向 1.重定向(redirect)就是通过各种方法将各种网络请求重新定个方向转到其它位置,从地址A跳转到地址B了. 2.重定向状态码: --301 redirect: 301 代表永久性转移( ...
- 微信小程序打开地图选择位置
wx.getLocation({ type: 'wgs84', success(res) { const latitude = res.latitude const longitude = res.l ...
- ASP.NET Core中使用EF Core(MySql)Code First
⒈添加依赖 MySql.Data.EntityFrameworkCore ⒉在appsettings.json配置文件中配置数据库连接字符串 { "Logging": { &quo ...
- 计算机和python
计算机基础知识 CPU 人类的大脑 运算和处理问题 内存 临时存储数据 断电就消失了 硬盘 永久 存储数据 操作系统是一个(特殊)的程序,调度硬件和软件之间的数据交互 python的应用和历史 IT, ...
- Django基础之路由(urls)层
目录 Django基础之路由(urls)层 无名分组与有名分组 无名分组 有名分组 反向解析 前段解析 后端解析 无名分组反向解析 前段解析 后端解析 有名分组的反向解析 前段解析 后端解析 路由分发 ...