Django ViewSet с асинхронными внешними вызовами

У меня есть набор представлений Django с действиями (конечными точками). Мне нужно вызвать два сервиса и - поскольку время их ответа велико - я хочу сделать это асинхронно. По какой-то причине этот код выполняется синхронно (get_bad_things запускается только после завершения get_good_things).

import asyncio
import requests

from rest_framework import viewsets
from rest_framework.response import Response


class AllThingsViewSet(viewsets.ViewSet):
    @action(detail=False, url_path="get_things/")
    def get_things(self, request) -> Response:

        async def get_good_things(cls):
            return requests.get("https://stackoverflow.com/")

        async def get_bad_things(cls):
            return requests.get("https://stackexchange.com/")
            
        try:
            loop = asyncio.get_event_loop()
        except RuntimeError:
            asyncio.set_event_loop(asyncio.new_event_loop())
            loop = asyncio.get_event_loop()


        things = loop.run_until_complete(
            asyncio.gather(*[get_good_things(self), get_bad_things(self)])
        )

        return Response(things[0], status=200)

Что я делаю неправильно? Я использую gunicorn WSGI.

Вернуться на верх