说明:
本人对:
接口异步 和 内部接口异步 的理解
接口异步: 允许多人同时请求接口。 内部接口异步:
查询语句有两条,每条语句time.sleep(3)停止3秒在进行查询
实现的效果是,总共睡3秒出来两条查询语句的结果,而不是总
共 睡6秒才出查询结果。
1.首先Django版本最低必须在4.1
2.在创建Django项目的时候,会自动带有asgi.py文件,如果没有,则可以自动创建asgi.py文件
asgi.py的配置内容:
(1)自动生成asgi.py文件的不用加入,没有的自动复制加入代码块,在setting的APP中注册channels
import os
from django.core.asgi import get_asgi_application
os.environ.setdefault('DJANGO_SETTINGS_MODULE', '自己项目名.settings')
application = get_asgi_application()
3.setting.py的配置项
1.把 WSGI_APPLICATION 注释掉
# WSGI_APPLICATION = 'taskout.wsgi.application'
2.添加 ASGI_APPLICATION = '项目名,asgi.application'
ASGI_APPLICATION = 'taskout.asgi.application'
现在已经实现接口异步了,还没实现内部接口异步
4.async 和 await是成套使用的
from django.http import HttpResponse
from asyncio import sleep,get_event_loop # get_event_loop是存放任务的地方 (1,2)
import time #(1,2)
async def page_pay_return(request):
loop = get_event_loop() #实例化一个对象
start = int(time.time())
slp1 = loop.create_task(sleep(3)) #加入到任务队列里面,就是一个任务池
print(1)
slp = loop.create_task(sleep(3))
print(2)
#把任务添加到 任务池中
await slp #调用 slp任务
await slp1 #调用 slp任务
end = int(time.time())
return HttpResponse(f"开始{start}结束{end}")
当代码执行到第一个await时,发现时异步任务,此时,他就会去任务队列里找别的任务进行执行
5.此时已经实现接口异步和内部接口异步
6.了解完,发现实现一次内部接口异步就要添加一次 loop.create_task(sleep(3)) 任务和执行一次 await slp 任务,让后可以自行封装使用。