Как сделать Django Rest Apis Async - PullRequest
0 голосов
/ 20 апреля 2020

Ниже приведена конфигурация моего Django приложения:

django = 2.2.11
djangorestframework = 3.9.2
Python = 3.8.2

Я представляю набор Rest apis для интерфейса js, который подключается к Postgres с использованием многоуровневой архитектуры views (controller) - services - data_layer. В слое данных я выбираю данные, используя Connection.Cursor, затем преобразую данные, выбранные, используя cursor.fetchall.

По умолчанию остальные API являются синхронными API, я пытаюсь найти способ сделать их Asyn c, так что масштабируемость системы может быть увеличена, в противном случае каждый вызов блокирует основной поток.

Я пробовал следующие параметры:

  1. Использование библиотеки asyncio, но Я не могу сделать полную цепочку вызовов Asyn c. Обычно я получаю сообщение об ошибке, что ожидаемый возврат был Response / HttpResponse, но метод возвращает Co-рутину. Я могу найти примеры, содержащие простые методы asyn c, но нет примера Django Rest API

  2. Попробовал следующую ссылку, который использует исполнителя Threadpool для разделения каждого вызова потока в самом контроллере, хотя проблема заключается в том, где выполнить вызов Asyncio в методе Main, как показано в ссылке, поскольку эти API-интерфейсы вызываются извне.

  3. Может помочь aiohttp, но не уверен, но если у кого-то есть другой пример, мне придется прибегнуть к дизайну сервисного брокера с использованием посредника, такого как Redis, который, на мой взгляд, не требует сложностей. *

    Любая помощь / ссылка на topi c приветствуется.

...