Django:Как использовать "objects.all()" и "for" в async
Я хочу периодически обращаться к информации модели, используя asyncio и threading.
После выборки данных модели с помощью objects.all() в асинхронной корутине возникает ошибка при выполнении цикла for.
You cannot call this from an async context - use a thread or sync_to_async.
---code---
[task.py]
asyncio.run_coroutine_threadsafe(chat.handle(), loop.LOOP)
[chat.py]
async def handle():
while True:
users = user.objects.all()
for user in users:
print(user.user_id)
await asyncio.sleep(60)
---Details---
[Website/loop.py]
import asyncio
LOOP = None
def run_loop():
global LOOP
LOOP = asyncio.new_event_loop()
LOOP.run_forever()
[Website/__init__.py]
from Monitoring import loop
import threading
import sys
threading.Thread(target=loop.run_loop).start()
При обращении к тестовой странице, check() в task.py будет работать.
[Monitoring/task.py]]
import asyncio
from Monitoring import chat
from Website import loop
def check():
asyncio.run_coroutine_threadsafe(chat.handle(), loop.LOOP)
[Monitoring/chat.py]
import asyncio
from Monitoring.models import User
async def handle():
while True:
users = User.objects.all()
for user in users:
print(user.user_id)
await asyncio.sleep(60)