Как заставить основной поток 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())
Вернуться на верх