Как заставить основной поток uWSGI не обслуживать запросы для веб-приложения Django?
В моем приложении Django, в __init__.py
, у меня есть класс, который раскручивает цикл событий.
class X:
def __init__(self):
self.__loop = asyncio.get_event_loop()
async def foo(self):
...
def do_stuff(self):
# some logic here
self.__loop.run_until_complete(foo())
В __init__.py
у меня просто есть
x = X()
В моих представлениях Django, я делаю
from myapp import x
def example_view(request):
result = x.do_stuff()
return JsonResponse({"result": result})
Но проблема в том, что с uWSGI, если поток, обслуживающий запрос, тот же, что использовался при инициализации, я получаю исключение Django SynchronousOnlyOperation
, поскольку он обнаруживает запущенный цикл событий в этом конкретном потоке.
Итак, мой вопрос в том, есть ли способ не использовать этот инициализирующий поток для обслуживания запросов или какая-то другая альтернатива, чтобы решить эту проблему?
uwSGI настроен на выполнение нескольких процессов и нескольких потоков, с --enable-threads
Как насчет этого:
class X:
async def foo(self):
...
def do_stuff(self):
asyncio.run(foo())