Django设置异步任务

1、安装Django-celery 包:pip install django-celery==3.2.2

2、开启redis服务

  需要使用redis做broker,所以在使用异步和定时任务时需要开启redis服务器

3、配置信息

  

  在INSTALLED_APPS引入模块

  

配置具体信息

# 自定义异步
import djcelery
djcelery.setup_loader()
# BROKER_URL = ‘django://‘ # 使用django做broker,消息代理、队列
BROKER_URL = ‘redis://10.255.0.250:6379/4‘  # 使用redid做broker,消息代理、队列
CELERYBEAT_SCHEDULER = ‘djcelery.schedulers.DatabaseScheduler‘  # 这是使用了django-celery默认的数据库调度模型,任务执行周期都被存在你指定的orm数据库中
# BROKER_POOL_LIMIT = 0
CELERY_RESULT_BACKEND = ‘djcelery.backends.database:DatabaseBackend‘  # 需要跟踪任务的状态时保存结果和状态,结果存储
# CELERY_RESULT_BACKEND = ‘redis://127.0.0.1:6379/2‘
CELERY_TIMEZONE = ‘Asia/Shanghai‘  # 默认上海时区
CELERY_ACCEPT_CONTENT = [‘pickle‘, ‘json‘, ‘msgpack‘, ‘yaml‘]
CELERY_TASK_SERIALIZER = ‘json‘
CELERY_RESULT_SERIALIZER = ‘json‘
# 调度任务
from datetime import timedelta
from celery.schedules import crontab

CELERYBEAT_SCHEDULE = {
    # 定时任务
    ‘daybreake‘: {
        ‘task‘: ‘emall_app.tasks.add‘,
        ‘schedule‘: crontab(minute=u‘1‘, hour=u‘0‘),
        ‘args‘: (2, 3)
    },
    # 定期任务
    ‘add-every-3-secondes‘: {
        ‘task‘: ‘emall_app.tasks.add‘,
        ‘schedule‘: timedelta(seconds=10),
        ‘args‘: (5, 5)
    },

}

具体的异步任务的方法(如果想在别的模块用到异步,就必须在各个模块的目录中创建task.py文件ps:文件名必须是这个,在这个模块中写方法)

@task
def add(x, y):
    return x + y

在别的view文件调用

from emall_app.tasks import add
from prod_core import constants
from prod_core.decorators import json_response

@json_response
def task_demo(request):
    result = add.delay(2, 2)
    log.exception(‘=========== result‘)
    log.exception(result)

    if result.ready():
        print "Task has run"
        if result.successful():
            print "Result was: %s" % result.result
        else:
            if isinstance(result.result, Exception):
                print "Task failed due to raising an exception"
                raise result.result
            else:
                print "Task failed without raising exception"
    else:
        print "Task has not yet run"
    return {‘code‘: constants.RESULT_SUCCESS}

4、启动异步任务

启动broker:

celery worker -l info

启动心跳:

python manage.py celery beat

注意:启动broker和启动心跳必须是在两个不同的终端,每次添加异步任务时都必须重新开启心跳和开启broker。且先把根目录下的celerybeat.pid删除

原文地址:https://www.cnblogs.com/wuyan717/p/9317041.html

时间: 2024-10-17 00:28:36

Django设置异步任务的相关文章

PostgreSQL Replication之第四章 设置异步复制(1)

执行完您的第一个即时恢复(PITR,Point-In-Time-Recovery),我们准备在一个真正的复制设置上工作.在本章,您将学会如何设置异步复制和流.我们的目标是确保您可以实现更高的高可用和更高的数据安全性. 在本章,我们将讨论以下主题: • 配置异步复制 • 理解流 • 合并流和归档 • 管理时间线 在本章的最后,您将很容易地在几分钟内设置流复制. 4.1 设置流复制 在前面章节中,我们已经从简单的16MB XLOG文件做了恢复.从逻辑上讲,重放进程一次只能重放16MB.这在您的复制设

Django 设置media static

Django 设置media static 本文python版本3.6.1,Django版本1.11.1 1.settings.py配置 增加django.template.context_processors.media ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 TEMPLATES = [     {         'BACKEND': 'django.template.backends.django.DjangoTemplates',     

django设置cookies

登录页面和首页分开 index.html: <html> <head> <title>首页</title> </head> <body> <div>这是首页,当前登录用户是:<span style="color:green">{{currentuser}}</span> </div> </body> </html> userlogin.html

django 设置静态文件,static

一.搜集静态文件 1.1 命令行查看 collectstatic guoguos-MacBook-Pro:mysite guoguo$ python manage.py -h [staticfiles] collectstatic findstatic runserver 1.2 执行 python manage.py collectstatic 收集信息 guoguos-MacBook-Pro:mysite guoguo$ python manage.py collectstatic You

用django发送异步邮件

太阳底下没有新鲜事,github是一个神奇的地方,你有什么想法,需求,点子.其实别人早就想到,而且也已经做到. 所以不要高估自己,有什么想法还是GITHUB一下,免得成了井底之娃. 这几天一直在研究python的异步发送邮件问题,django , flask 之流都是同步框架,处理IO,发送电子邮件这种耗时的操作,就有点蛋痛了. 由于基础知识不扎实,自行研究了Asyncio之流无果,在github上无赖的输入了asyn django sendmail 搜索了一把.居然找到了别人已经封闭好的源代码

Django ajax异步请求分页的实现

Django中有一个自带的Paginator分页器,用起来很方便的在原生的模板中进行调用函数分页: 可是每次点击换页都会重新载入页面,原来是原生分页器依靠的是A标签的GET请求实现的,这就要用ajax异步请求来解决这个尴尬的情况,(有时同一页面会有多个不同的分类需要添加分页器的场景等),但是ajax回调时接收的是json,而json不能给模板传入对象,该怎么分页呢? 1.就将分页需要用到的数据从对象中提前取出来,放在字典里面 2.前台调用时候不再从对象中取,而是字典中取,完成分页样式:  我把一

django设置cookie和session

1 设置cookie 本例中应用名称为cookie 模型model from django.db import models from django.db import models class UserInfo(models.Model): username = models.CharField(max_length=64) password = models.CharField(max_length=64) 数据库迁移 python manage.py makemigrations pyth

Django设置Cookie的过期时间expires, max_age的格式

cookie中 max_age和expires的关系: 1. 若没有填写 max_age, expires ,默认都为None 此时该cooike为临时的,只存在浏览器内存中, 关闭浏览器则自动删除 2. 只有max_age, 则按秒计算过期时间, 浏览器会存在本地缓存路径, 并自动删除过期cookie 3. 只有expires, 则按照时间字符串计算过期时间, 浏览器会存在本地缓存路径, 自动删除过期cookie 3. 若 max_age和 expires 同时存在, 则默认使用 max_ag

Django设置允许跨域请求

1. 安装模块django-cors-headers pip3 install django-cors-headers 2. 配置django项目的settings.py文件 配置INSTALLED_APPS INSTALLED_APPS = [ ..., 'corsheaders' ] 配置中间件, 注意顺序 MIDDLEWARE = [ ..., 'corsheaders.middleware.CorsMiddleware', 'django.middleware.common.Common