测试Django REST Framework异步模式遇异常:同步视图未按预期阻塞
使用ADRF测试Django REST Framework异步模式的问题
我在使用adrf库测试Django REST Framework异步模式时遇到了不符合预期的情况,具体细节如下:
同步视图代码
from rest_framework.decorators import api_view as sync_api_view import time from rest_framework.response import Response @sync_api_view(['GET']) def my_not_async_view(request): print('before block endpoint') time.sleep(15) return Response({"message": "my_async_view"})
测试步骤
- 用Uvicorn运行项目:
uvicorn async_django.asgi:application --workers=1
- 执行curl命令并发测试:
for x in `seq 1 3`; do time curl http://localhost:8000/async-test/not-async & done; echo Starting
预期与实际日志
预期日志(#1)
before block endpoint # 等待15秒后输出下一行 before block endpoint
实际日志(#2)
before block endpoint before block endpoint # 运行在另一个线程 before block endpoint # 运行在另一个线程
我的测试逻辑与异步视图代码
我原本的逻辑是:请求同步视图时,在响应返回前应该阻塞整个服务,不会同时输出多个标识;而请求异步视图时,发送多少次请求就应该看到多少次对应输出。
异步视图代码如下:
import asyncio from adrf.decorators import api_view from rest_framework.response import Response @api_view(['GET']) async def get_async_response(request): print("async code is running") await asyncio.sleep(10) return Response({"message": "async_result"})
内容的提问来源于stack exchange,提问作者Librain
相关产品推荐
相关产品推荐

