You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

测试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"})

测试步骤

  1. 用Uvicorn运行项目:
uvicorn async_django.asgi:application --workers=1
  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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 03:12:45