django —— Celery实现异步和定时任务
1. 环境
python==2.7 djang==1.11.2 # 1.8, 1.9, 1.10应该都没问题 celery-with-redis==3.0 # 需要用到redis作为中间人服务(Broker)
celery==3.1.25 # 安装上面的会自动安装
kombu==3.0.37
billiard==3.3.0.23 django-celery==3.2.2 # celery插件, 实现定时任务
celery>=4.0 对此环境会有报错, 暂不建议在此环境下使用
2. 安装
pip install django==1.11.2 celery-with-redis==3.0 django-celery==3.2.2
3. 安装Redis, 用作Broker (RabbitMQ 官方推荐, 但安装麻烦点)
教程很多, 略
4. 新建django项目
- Demo
- Demo
setting.py
wsgi.py
urls.py
- app
- migrations
models.py
views.py
...
- 配置
settings.py 
INSTALLED_APPS = (
...
'app',
'djcelery',# django-celery 可以在admin后台定义定时任务, 开始前需要直接migrate
) BROKER_URL = 'redis://127.0.0.1:6379/0'
BROKER_TRANSPORT = 'redis' CELERYBEAT_SCHEDULER = 'djcelery.schedulers.DatabaseScheduler' # 数据库调度
- 新建文件
Demo/Demo/celery.py 
from __future__ import absolute_import import os from celery import Celery # set the default Django settings module for the 'celery' program.
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'Demo.settings') from django.conf import settings # noqa app = Celery('Demo') # Using a string here means the worker will not have to
# pickle the object when using Windows.
app.config_from_object('django.conf:settings')
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS) @app.task(bind=True)
def debug_task(self):
print('Request: {0!r}'.format(self.request))
- 新建
Demo/app/tasks.py 
from Demo.celery import app @app.task
def cus_task(*arg):
print('This is a test task')
- 编辑
Demo/app/views.py 
from django.shortcuts import render, HttpResponse from .tasks import cus_task def index(request):
cus_task.delay()
return HttpResponse("Test async task")
- 启动
django和celery 
# django
python manage.py runserver # celery
celery -A Demo worker -l debug
admin后台中配置celery计划
- 配置
 # 如上settings.py中的设置, 后执行
python manage.py migrate djcelery
- 登陆admin后台进行配置
 # Djcelery模块列表 Crontabs # 同linux crontab
Intervals # 间隔
Periodic tasks # 周期任务
Tasks
Workers
  配置一个periodic task任务内容 app.tasks.cus_task 用crontab或interval设置每5s执行一次
- 启动django和celery, 并查看日志
 celery -A Demo worker -l debug # 另一个窗口
celery -A Demo beat -l debug --max-interval=10 # 每10s扫描一次djcelery任务
nohup 后台启动
nohup celery -A Demo worker -l debug > abc.log &
django —— Celery实现异步和定时任务的更多相关文章
- Django + Celery 实现动态配置定时任务
		
哈喽,今天给大家分享一篇Django+Celery实现动态配置定时任务,因为最近也是无意间看到一位大佬关于这块的文章,然后自己觉得不错,也想学习写一下,然后最终实现功能是在前端页面统一管理计划任务,大 ...
 - django+celery+redis实现运行定时任务
		
0.目的 在开发项目中,经常有一些操作时间比较长(生产环境中超过了nginx的timeout时间),或者是间隔一段时间就要执行的任务. 在这种情况下,使用celery就是一个很好的选择. cele ...
 - Django+Celery 执行异步任务和定时任务
		
celery是一个基于python开发的简单.灵活且可靠的分布式任务队列框架,支持使用任务队列的方式在分布式的机器/进程/线程上执行任务调度.采用典型的生产者-消费者模型,主要由三部分组成: 1. 消 ...
 - django -- Celery实现异步任务
		
1. 环境 python==2.7 djang==1.11.2 # 1.8, 1.9, 1.10应该都没问题 celery-with-redis==3.0 # 需要用到redis作为中间人服务(Bro ...
 - Django Celery Redis 异步执行任务demo实例
		
一.windows中安装redis 安装过程见 <在windows x64上部署使用Redis> 二.环境准备 requirements.txt Django==1.10.5 celery ...
 - 使用django + celery + redis 异步发送邮件
		
参考:http://blog.csdn.net/Ricky110/article/details/77205291 环境: centos7 + python3.6.1 + django2.0.1 ...
 - Celery+python+redis异步执行定时任务
		
我之前的一篇文章中写了[Celery+django+redis异步执行任务] 博文:http://blog.csdn.net/apple9005/article/details/54236212 你会 ...
 - Django搭配Celery进行异步/定时任务(一)初步搭建
		
以下需求场景很常见: 1. 用户点击页面按钮,请求后台进行一系列耗时非常高的操作,页面没有响应/一直Loading,用户体验非常不好. 2. 某些数据需要预先处理,每天凌晨的时候进行运算,大约半小时到 ...
 - Django+Celery+xadmin实现异步任务和定时任务
		
Django+Celery+xadmin实现异步任务和定时任务 关注公众号"轻松学编程"了解更多. 一.celery介绍 1.简介 [官网]http://www.celerypro ...
 
随机推荐
- 微信支付HTTPS服务器证书验证指引
			
1. 背景介绍 2. 常见问题 3. 验证证书 4. 安装证书 背景介绍 微信支付使用HTTPS来保证通信安全, 在HTTPS服务器上部署了由权威机构签发的证书, 用于证明微信支付平台的真实身份. 商 ...
 - log4j(三)——如何控制不同级别的日志信息的输出?
			
一:测试环境与log4j(一)——为什么要使用log4j?一样,这里不再重述 二:老规矩,先来个栗子,然后再聊聊感受 import org.apache.log4j.*; //by godtrue p ...
 - Android开发 Fragment中调用startActivityForResult返回错误的requestCode
			
返回错误的requestCode返回值为65537,在Fragment里调用startActivityForResult,就必须在Fragment里处理onActivityResult.
 - 启动mysql报错 -- ERROR! The server quit without updating PID file
			
开发说某个测试环境的mysql,无法重启了,报以下错误提示: # service mysqld restart Shutting down MySQL.. SUCCESS! Starting MySQ ...
 - PyCharm黄色波浪线提示: Simplify chained comparison
			
译过来就是,可简化连锁比较: case 1 if a >= 0 and a <= 9: 1 可简化为: if 0 <= a <= 9: 1 就像我们的数学表达式一样.显然这种情 ...
 - Android新特性--ConstraintLayout完全解析
			
Android新特性--ConstraintLayout完全解析 本篇文章的主题是ConstraintLayout.其实ConstraintLayout是Android Studio 2.2中主要的新 ...
 - nginx 读取文件 permission denied
			
nginx 是在root用户下安装的,静态网页的目录/var/www/html/ 目录下的内容所有者也是root 用户,按照 nginx配置文件中location说明 配置静态文件访问地址. 使用网址 ...
 - ubuntu 安装python mysqldb
			
sudo apt-get install python-mysqldb #!/usr/bin/python #-*-coding:utf-8-*- ''' This file include all ...
 - 负载均衡层次结构:LVS Nginx DNS CDN
			
文章地址:http://blog.csdn.net/mindfloating/article/details/51020767 作为后端应用的开发者,我们经常开发.调试.测试完我们的应用并发布到生产环 ...
 - Go基础--终端操作和文件操作
			
终端操作 操作终端相关的文件句柄常量os.Stdin:标准输入os.Stdout:标准输出os.Stderr:标准错误输出 关于终端操作的代码例子: package main import " ...