[Настройка] Я использую Django 3.0 в качестве приложения wsgi
.
Мне нужно запустить сопрограмму (показанную ниже) из вида. Это выполняется в asyncio
eventl oop. Из этого цикла событий / сопрограммы мне нужно получить некоторые объекты в базе данных, используя ORM Django, но django выдает следующее исключение:
django.core.exceptions.SynchronousOnlyOperation: You cannot call this from an async context - use a thread or sync_to_async
import asyncio
import concurrent
def get_users_from_db():
return User.objects.all()
async def do_some_async_stuff():
executor = concurrent.futures.ThreadPoolExecutor(max_workers=3)
loop = asyncio.get_event_loop()
attachments = await loop.run_in_executor(executor, get_users_from_db)
def view(request):
task = LOOP.create_task(do_some_async_stuff)
result = not LOOP.is_running() and LOOP.run_until_complete(task)
I Я не уверен, что я делаю неправильно. Насколько я понимаю, Django делает c предполагает, что я должен иметь возможность запускать синхронные задачи (например, запрос ORM) в отдельном потоке, но это все равно не работает.
Интересно то, что запуск кода локально с использованием manage.py runserver
работает нормально, однако запуск его с помощью `gunicorn --bind 127.0.0.1:8000 sr c .config.wsgi: приложение выдает вышеупомянутое исключение .