Создайте асинхронную очередь Python на основе двух динамических запросов Django ORM
Мне нужно делать предложения агентам в чате. Оба предложения берутся из Django ORM динамически, у агентов есть ограничения на максимальное количество активных чатов. У одного агента должно быть одно предложение одновременно. Чат должен предлагаться разным агентам последовательно. Вот пример попытки, показывающий ожидаемую логику, но он предлагает только один чат в одно время.
async def offerer():
while True:
await asyncio.sleep(0.1)
async for chat in Chat.objects.filter(Q(status = 'initiated') | Q(status = 'queued')).order_by('last_init')[:5]:
chatid = chat.chatid
dobreak = False
account = chat.chatacc_id
async for agent in Agent.objects.filter(status = 'ready', accounts = account, number_active__lt = maxchats).order_by('number_active'):
data = {"type": "chat_initiated", "chatid": chat.chatid}
await channel_layer.group_send(f'agent_{agent.agentid}', data)
await asyncio.sleep(5)
# check if chat was accepted
chat_updated = await Chat.objects.aget(chatid = chatid)
if 'active' in chat_updated.status:
dobreak = True
break
else:
await channel_layer.group_send(f'agent_{agent.agentid}', {"type": "cancel", "value": chat.chatid})
if dobreak:
break
async def main():
asyncio.create_task(offerer())
loop = asyncio.new_event_loop()
loop.create_task(main())
loop.run_forever()
Как правильно это сделать?