官方文档

其他文档

开发环境

  • python                         3.6.8
  • django                         1.11
  • celery                           4.3.0
  • django-celery-results  1.1.2
  • django-celery-beat     1.5.0

安装 redis

安装操作 redis 库

pip install redis

(这里说明一下,pip 安装的 redis 仅仅是一个连接到 redis 缓存的一个工具;redis 服务需要自己去安装,安装文档如上)

安装 celery

pip install celery

安装 Django-celery-results

pip install django-celery-results

配置 settings.py

# 添加 djcelery APP
INSTALLED_APPS = [
# ...
'django_celery_results', # 查看 celery 执行结果
] # django 缓存
CACHES = {
"default": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://127.0.0.1:6379/1",
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
}
}
} # celery 定时任务
# 注意,celery4 版本后,CELERY_BROKER_URL 改为 BROKER_URL
BROKER_URL = 'redis://127.0.0.1:6379/0' # Broker 使用 Redis, 使用0数据库(暂时不是很清楚原理)
# CELERYBEAT_SCHEDULER = 'djcelery.schedulers.DatabaseScheduler' # 定时任务调度器 python manage.py celery beat
CELERYD_MAX_TASKS_PER_CHILD = 3 # 每个 worker 最多执行3个任务就会被销毁,可防止内存泄露
# CELERY_RESULT_BACKEND = 'redis://127.0.0.1:6379/0' # celery 结果返回,可用于跟踪结果
CELERY_RESULT_BACKEND = 'django-db' # 使用 database 作为结果存储
CELERY_CACHE_BACKEND = 'django-cache' # celery 后端缓存 # celery 内容等消息的格式设置
if os.name != "nt":
# Mac and Centos
# worker 启动命令:celery -A sqlmanager worker -l info
CELERY_ACCEPT_CONTENT = ['application/json', ]
CELERY_TASK_SERIALIZER = 'json'
# CELERY_RESULT_SERIALIZER = 'json'
else:
# windows
# pip install eventlet
# worker 启动命令:celery -A sqlmanager worker -l info -P eventlet
CELERY_ACCEPT_CONTENT = ['pickle', ]
CELERY_TASK_SERIALIZER = 'pickle'
# CELERY_RESULT_SERIALIZER = 'pickle'

  

生成 Django-celery-results 关联表

python manage.py migrate

 

python manage.py migrate
# 结果
raven.contrib.django.client.DjangoClient: 2019-12-15 21:47:10,426 /XXXXX/lib/python3.6/site-packages/raven/base.py [line:213] INFO Raven is not configured (logging is disabled). Please see the documentation for more information.
Operations to perform:
Apply all migrations: admin, auth, blog, captcha, contenttypes, django_celery_results, djcelery, logger, photo, sessions, sites, user, users
Running migrations:
Applying django_celery_results.0001_initial... OK
Applying django_celery_results.0002_add_task_name_args_kwargs... OK
Applying django_celery_results.0003_auto_20181106_1101... OK
Applying django_celery_results.0004_auto_20190516_0412... OK
Applying djcelery.0001_initial... OK

  

项目根目录添加 celery.py

from __future__ import absolute_import, unicode_literals
from celery import Celery
from django.conf import settings
import os # 获取当前文件夹名,即为该 Django 的项目名
project_name = os.path.split(os.path.abspath('.'))[-1]
project_settings = '%s.settings' % project_name # 设置环境变量
os.environ.setdefault('DJANGO_SETTINGS_MODULE', project_settings) # 实例化 Celery
app = Celery(project_name) # 使用 django 的 settings 文件配置 celery
app.config_from_object('django.conf:settings') # Celery 加载所有注册的应用
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)

配置项目根目录 __init__.py

from __future__ import absolute_import, unicode_literals

# This will make sure the app is always imported when
# Django starts so that shared_task will use this app.
from .celery import app as celery_app import pymysql pymysql.install_as_MySQLdb() __all__ = ('celery_app',)

app 目录添加 tasks.py

import json
import requests
from celery import task @task
def task_send_dd_text(url, msg, atMoblies, atAll="flase"):
body = {
"msgtype": "text",
"text": {
"content": msg
},
"at": {
"atMobiles": atMoblies,
"isAtAll": atAll
} }
headers = {'content-type': 'application/json',
'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:22.0) Gecko/20100101 Firefox/22.0'}
r = requests.post(url, headers=headers, data=json.dumps(body))
# print(r.text)

  

views.py 调用

# 假如 url 设置成 test

def test(request):
# 导入
from .tasks import task_send_dd_text
# 执行
task_send_dd_text.delay(settings.DD_NOTICE_URL, "异步任务调用成功", atMoblies=["18612345678"], atAll="false")
return HttpResponse("test")

  

启动 celery worker

# 项目根目录终端执行(项目名称)

centos or mac os:celery -A sqlmanager(项目名称) worker -l info (centos)
windows: celery -A sqlmanager(项目名称) worker -l info -P eventlet (可能还需要 pip install eventlet) # 守护进程 /root/.virtualenvs/blog/bin/celery multi start w1 -A sqlmanager(项目名称) -l info --logfile=./celerylog.log

  

centos7 守护 celery worker

访问调用 异步任务 的视图

http://127.0.0.1/test

Django 后台查看 celery 异步任务结果

Django + celery + redis 执行异步任务及查看结果的更多相关文章

  1. Django+Celery+Redis实现异步任务(发送邮件)

    安装如下依赖库 pip install Celery pip install django-celery pip install django-redis 还要安装本地的Redis服务 setting ...

  2. Django+Celery+xadmin实现异步任务和定时任务

    Django+Celery+xadmin实现异步任务和定时任务 关注公众号"轻松学编程"了解更多. 一.celery介绍 1.简介 [官网]http://www.celerypro ...

  3. django celery redis 定时任务

    0.目的 在开发项目中,经常有一些操作时间比较长(生产环境中超过了nginx的timeout时间),或者是间隔一段时间就要执行的任务. 在这种情况下,使用celery就是一个很好的选择.   cele ...

  4. django+celery+redis实现运行定时任务

    0.目的 在开发项目中,经常有一些操作时间比较长(生产环境中超过了nginx的timeout时间),或者是间隔一段时间就要执行的任务. 在这种情况下,使用celery就是一个很好的选择.   cele ...

  5. django+celery+redis环境搭建

    初次尝试搭建django+celery+redis环境,记录下来,慢慢学习~ 1.安装apache 下载httpd-2.0.63.tar.gz,解压tar zxvf httpd-2.0.63.tar. ...

  6. Celery+redis实现异步

    目录 Celery+redis实现异步 安装redis 安装celery-with-redis 添加celery相关配置 创建异步运行任务tasks.py 启动 Celery+redis实现异步 安装 ...

  7. 06: django+celery+redis

    目录: 1.1 Celery介绍 1.2 celery 组件 1.3 安装相关包 与 管理命令 1.4 celery与Django执行异步任务 1.5 在django中使用计划任务功能 1.1 Cel ...

  8. 项目部署Django+celery+redis

    celery介绍 1.celery应用举例 1.Celery 是一个 基于python开发的分布式异步消息任务队列,通过它可以轻松的实现任务的异步处理,   如果你的业务场景中需要用到异步任务,就可以 ...

  9. django+celery+redis应用

    一.celery介绍 1.应用场景 a. Celery 是一个 基于python开发的分布式异步消息任务队列,通过它可以轻松的实现任务的异步处理,如果你的业务场景中需要用到异步任务,就可以考虑使用ce ...

  10. 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 大概的报错如下截图: 是在开 ...

随机推荐

  1. 调用内部或私有方法的N种方法

    非公开的类型或者方法被"隐藏"在程序集内部,本就不希望从外部访问,但是有时候调用一个内部或者私有方法可能是唯一的"救命稻草",这篇文章列出了几种具体的实现方式. ...

  2. Mysql获取时间戳的一些处理

    前情提要: 老板需要一个统计今日新增用户的功能 我的想法是统计24小时内新增用户的功能 直接去问AI 我明确指出了时间戳 但是AI给出的答案却差了口气 这就是老板给我工资而不是给微软工资的地方 DAT ...

  3. .NET Core中关于阿拉伯语环境下的坑:Input string was not in a correct format.

    结论 .NET Core项目(.NET Framework没出现)在阿拉伯语(即语言名称是ar-开头的语言)环境下,将负数字符串转成数字,即int.Parse("-1")或Conv ...

  4. Docker安装及镜像加速器配置

    Centos7安装 卸载旧版本(如果安装过旧版本的话) yum remove docker docker-common docker-selinux docker-engine 安装Docker依赖环 ...

  5. DataGridView 控件分页

    在使用Winform开发桌面应用时,工具箱预先提供了丰富的基础控件,利用这些基础控件可以开展各类项目的开发.但是或多或少都会出现既有控件无法满足功能需求的情况,或者在开发类似项目时,我们希望将具有相同 ...

  6. quarkus实战之五:细说maven插件

    quarkus的maven插件非常重要,管理和构建工程时都离不开,本篇就来一起了解和掌握它 欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com ...

  7. EasyExcel中使用表头模板示例

    解决方案 在EasyExcel的官方示例中,使用模板导出Excel,其结果仍然还会重新打印表头.不满足使用表头模板的需求.在参考源码后,找到如下解决方案. String templateFileNam ...

  8. jQuery入口函数测试

    <script src="js/jquery-1.12.4.js"></script><script> window.onload = func ...

  9. docker swarm 使用详解

    转载请注明出处: 1.docker swarm 的组成架构 一个基本的docker swarm 的架构如下: 它主要包含这几个核心组件: Manager节点(Manager Nodes): 管理节点是 ...

  10. Stable Diffusion基础:ControlNet之图片风格迁移

    今天继续给大家分享AI绘画中 ControlNet 的强大功能,本次的主角是 Reference,它可以将参照图片的风格迁移到新生成的图片中,这句话理解起来很困难,我们将通过几个实例来加深体会,比如照 ...