Celery+redis实现异步
Celery+redis实现异步
安装redis
sudo apt-get install redis-server
安装celery-with-redis
进入虚拟环境
source bin/active
pip 安装
pip install celery-with-redis
这一步会安装几个包 具体每个有什么用我也不知道 反正好用就行
添加celery相关配置
在项目配置目录下(即 settings.py 所在目录)添加 celery.py 文件
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from __future__ import absolute_import
import os
from celery import Celery
from django.conf import settings
# set the default Django settings module for the program.
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'project_name.settings')
app = Celery('project_name') # 这里project_name填写项目名称, 注意不是app名称
# 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))
这样还不够, 还需要让python能够启动celery, 所以修改项目配置目录下(即 settings.py 所在目录)的 __init__.py 文件, 在其中添加
from .celery import app as celery_app
同时, 还需在 settings.py 中添加
BROKER_URL = 'redis://localhost:6379'
CELERY_RESULT_BACKEND = 'redis://localhost:6379'
CELERY_ACCEPT_CONTENT = ['application/json'] # 这个地方可以按照需求增加或改动
CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'
CELERY_TIMEZONE = TIME_ZONE # 使用settings.py中的时区
因为redis默认开的端口是6379, 没有更改配置的话就是这样配置
创建异步运行任务tasks.py
在app目录下创建tasks.py如下
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from __future__ import absolute_import, unicode_literals
import time
from celery import Celery
from django.core.mail import send_mail, EmailMultiAlternatives, BadHeaderError
from .models import common_member, common_member_email_send_time
celery = Celery('tasks', broker='redis://localhost:6379/0')
@celery.task
def add(x, y):
return x + y
@celery.task
def run_test_suit(ts_id):
print("++++++++++++++++++++++++++++++++++++")
print('jobs[ts_id=%s] running....' % ts_id)
time.sleep(10.0)
print('jobs[ts_id=%s] done' % ts_id)
result = True
return result
# @celery.task
# def send_email_1(msg):
# msg.send()
这个地方我又按照廖雪峰的教程重新配置了celery, 可能有重复配置, 但是能用.
在 views.py 中添加相关视图
from django.http import HttpResponse
from .tasks import run_test_suit
def tasks(request):
print('before run_test_suit')
result = run_test_suit.delay('110')
print('after run_test_suit')
return HttpResponse("job is runing background~")
注意用了delay方法, 这个方法是放在装饰器里面的.
添加urls.py
略
启动
启动redis
redis-server启动celery
celery -A project_name worker -l info启动celery后, 在终端可以看到celery的log信息, 对于debug很有帮助
启动django
python manage.py runserver
Celery+redis实现异步的更多相关文章
- Django+Celery+Redis实现异步任务(发送邮件)
安装如下依赖库 pip install Celery pip install django-celery pip install django-redis 还要安装本地的Redis服务 setting ...
- django celery redis 定时任务
0.目的 在开发项目中,经常有一些操作时间比较长(生产环境中超过了nginx的timeout时间),或者是间隔一段时间就要执行的任务. 在这种情况下,使用celery就是一个很好的选择. cele ...
- django+celery+redis实现运行定时任务
0.目的 在开发项目中,经常有一些操作时间比较长(生产环境中超过了nginx的timeout时间),或者是间隔一段时间就要执行的任务. 在这种情况下,使用celery就是一个很好的选择. cele ...
- Django+Celery+xadmin实现异步任务和定时任务
Django+Celery+xadmin实现异步任务和定时任务 关注公众号"轻松学编程"了解更多. 一.celery介绍 1.简介 [官网]http://www.celerypro ...
- python celery + redis
redis http://debugo.com/python-redis celery http://docs.jinkan.org/docs/celery/getting-started/intro ...
- django+celery+redis环境搭建
初次尝试搭建django+celery+redis环境,记录下来,慢慢学习~ 1.安装apache 下载httpd-2.0.63.tar.gz,解压tar zxvf httpd-2.0.63.tar. ...
- celery + redis quick start
软件: redis server redis-server.exe 安装redis for python using pip 安装celery (redis) pip install -U &quo ...
- Django中Celery http请求异步处理(四)
Django中Celery http请求异步处理 本章延续celery之前的系列 1.settings配置 2.编写task jib_update_task任务为更新salt jid数据 3.url设 ...
- redis实现异步任务队列
redis实现异步任务队列 先说思路: 将任务对象序列为JSON字符串,然后推入REDIS缓存,这叫入队. 通过独立的工作线程从REDIS拉出一个任务,这叫出队,工作线程将JSON字符串还原为任务对象 ...
随机推荐
- ORA-XXXX错误集合
第一.ORA-12514:listener does not currently know of service requested in connect descriptor 监听器巴拉巴拉一堆,然 ...
- 九度oj 1034 寻找大富翁 2009年浙江大学计算机及软件工程研究生机试真题
题目1034:寻找大富翁 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:5323 解决:2123 题目描述: 浙江桐乡乌镇共有n个人,请找出该镇上的前m个大富翁. 输入: ...
- Windows加密API的功能分类
本地数据加密保护本地数据加密保护机制提供了简单的DAPI调用接口,密钥管理等等一概由系统来处理.DAPI的数据加密保护机制在用户登录会话范围或者本地计算范围,使用操作系统设计的方式加密保护数据和解密还 ...
- UML关系
UML关系详解 1.关联关系(association) 连接模型元素及链接实例,用一条实线来表示 2.依赖关系(dependency) 表示一个元素以某种方式依赖于另一个元素,用一条虚线加箭头来表示 ...
- Silverlight & Blend动画设计系列十三:三角函数(Trigonometry)动画之飘落的雪花(Falling Snow)
平时我们所看到的雪花(Falling Snow)飘飘的效果实际上也是一个动画,是由许多的动画对象共同完成的一个界面效果.对于不同大小的雪片可以通过缩放变换(ScaleTransform)功能特性确定, ...
- 关于asp.net假分页的删除操作的随笔
作为一个新人,上周负责优化一个后台管理系统,遇到一个问题:点击删除按钮之后,页面又回到了第一页. 而我需要达到的效果是:点击了删除按钮之后,原来是那一页,删除后还是在那一页. 由于项目是已经验收了的, ...
- MemcacheHelper.cs
using Memcached.ClientLibrary; using System; using System.Collections.Generic; using System.Linq; us ...
- nodejs的get与post
index.html <html> <body> <form action="/api/v1/records" method="post&q ...
- redux小结
1.创建reducers :保存初始化状态. 2.入口文件通过redux 中的 { createStore } 将 reducers保存为快照, 通过react-redux中的{ Provider } ...
- Android碎笔录2——按键的点击变色和圆角实现
android的Button默认写出来之后都是方形的直角,并且点击感很不明显,只要在drawable中加上一个xml就能解决这个问题: <?xml version="1.0" ...