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

Django使用gunicorn启动ASGI应用缺失send参数报错如何解决

错误原因

这个报错的核心原因是Gunicorn默认使用WSGI工作模式,而你启动的是符合ASGI协议的应用(因为集成了Channels处理WebSocket),两者的调用签名不匹配:

  • WSGI应用要求__call__(environ, start_response)两个入参
  • ASGI应用要求__call__(scope, receive, send)三个入参
    Gunicorn默认的同步worker按照WSGI规则调用ASGI应用,缺少了必填的send参数,因此触发类型错误。
解决方法

分两种场景选择对应方案:

场景1:需要保留WebSocket/异步等ASGI特性

你需要搭配支持ASGI的worker启动,推荐使用Uvicorn作为Gunicorn的工作进程:

  1. 先安装依赖:
    pip install uvicorn gunicorn
  2. 修改启动命令,指定ASGI worker类型:
    gunicorn --bind :8000 myproject.asgi:application -w 4 -k uvicorn.workers.UvicornWorker
    参数说明:-w指定进程数,-k指定使用Uvicorn的ASGI工作进程。
    如果不需要Gunicorn做进程管理,也可以直接用Uvicorn启动:
    uvicorn --host 0.0.0.0 --port 8000 myproject.asgi:application

场景2:不需要WebSocket/ASGI特性,仅需运行普通HTTP服务

你可以直接启动Django自带的WSGI应用即可,不需要调整依赖,修改启动命令为:
gunicorn --bind :8000 myproject.wsgi:application

排查步骤
  • 确认当前项目是否需要ASGI能力:如果集成了Channels、异步视图、Server-Sent Events等特性,必须使用ASGI服务器启动
  • 检查启动命令是否正确指定了ASGI worker类型,避免使用Gunicorn默认的WSGI worker
  • 先单独用Uvicorn启动ASGI应用验证应用本身是否正常,排除配置错误问题
  • 确认运行环境中uvicorn、gunicorn、channels、Django的版本兼容,避免版本冲突

内容的提问来源于stack exchange,提问作者Sultan Syidaliev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 17:24:03