Django 异步化库celery和定时任务


首先要了解Django其实是个同步框架,那么多个用户发送请求时就会发生排队的情况上一个用户的请求完成后在进行下一个,这样会对影响用户体验,所有就要用到异步方法来解决。

首先我们要安装celery库

pip install celery celery的基础库

pip install celery-with-rediscelery对redis的库

pip install django-celerycelery对django的库

安装完成后要在settings.py内进行设置

INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'demo',
    'djcelery'           # 添加  djcelery应用
)        
#配置celery
import djcelery
djcelery.setup_loader()
BROKER_URL = 'redis://127.0.0.1:6379'
CELERY_IMPORTS = ('mymac.tasks')

还要在同级目录下建立一个 celert.py文件

#导包
import os
import django
from celery import Celery
from django.conf import settings 
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mymac.settings')
django.setup()
app = Celery('mymac')
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))

然后建立一个py文件 创建celert异步方法

#导包
import time
#导入异步任务
from celery.task import task

#task使用装饰器用法
@task
def say(x,y):
    #稍后用于方便查看异步
    time.sleep(5)
    return x+y

在视图方法导入写好的异步方法,配置好相应路由访问即可

from django.shortcuts import render,redirect
#导包
from django.http import HttpResponse,HttpResponseRedirect
#导入类视图 
from django.views import View
#导入异步方法
from mymac.tasks import sayl

def celery_test(request):
    #用delay传参
    print(say.delay('123','123'))
    return HttpResponse('异步测试')

那怎么看是否是异步呢

我们需要在启动一个监听异步的服务,需要进入你的项目文件来启动服务命令是celery -A mymac worker -l info mymac为项目名

然后我们去发送请求,连续刷新相应请求页面已达到模拟多个用户同时访问

这个时候我们可以看到多个请求在发送但是我们在方法里设置了延时5秒所有只发送并没有完成

5秒后我们看到都开始相继完成了

celery内也有定时任务方法

#导入定时任务库
from celery.decorators import periodic_task
#利用参数来设置任务周期
@periodic_task(run_every=10)
def some_task():
    print('每十秒执行一次')
    time.sleep(5)
    print('执行完毕')
    return True

设置好后就会自动运行

也可以在 celery -A mymac worker -l info 监听异步内监听因为它本身也是异步的。

还可以在celery -A mymac beat -l info 内查看定时任务。

优质内容筛选与推荐>>
1、053(十五)
2、sublime text3汉化
3、yslow自行发送请求
4、解压大文件提示C盘空间不够的问题
5、您的gmail发送失败了。


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号





    联系我们

    欢迎来到TinyMind。

    关于TinyMind的内容或商务合作、网站建议,举报不良信息等均可联系我们。

    TinyMind客服邮箱:support@tinymind.net.cn