3

尝试从 Django 3.1 中的异步视图连接到由同一 asgi 服务器提供的同步视图时遇到问题。在普通的 wsgi 开发服务器中这样做是可行的,但在 asgi 服务器中却不行。这似乎有点奇怪。可能我误解了 asgi 的工作原理:)。这是有关如何重现此内容的链接:

重现此的所有步骤。

这里只是导致问题的观点。也许有人可以通过查看这些内容来立即判断我做错了什么:

import httpx

from django.http import JsonResponse


def sync_api_view(request):
    payload = {"foo": "bar"}
    return JsonResponse(payload)


def sync_aggregation_view(request):
    responses = []
    r = httpx.get("http://127.0.0.1:8000/sync_api_view/")
    responses.append(r.json())
    result = {"responses": responses}
    return JsonResponse(result)

“sync_aggregation_view”是在 wsgi 中工作但不能通过 asgi 工作的那个。

4

1 回答 1

1

好吧,犯了一个愚蠢的错误。从该服务器内连接到单线程服务器会导致死锁。wsgi django 开发服务器行为不同的原因不是 wsgi 或 asgi,而是因为从 Django 1.4 开始它默认是多线程的。我只是没有注意到。

于 2020-07-03T10:35:01.270 回答