Я взял пример реализации RPC из документации aio-pika, все бы ничего, но он не применим к долгим задачам, функция передающая задачу на выполнение блокирующая и ждет пока выполнится переданная задача, поэтому программа не может отправить задачу из очереди следующему воркеру, а отправляет только по завершению предыдущей.
Как сделать так чтобы функция отправки задачи не блокировала свой луп?
Код воркера:
async def receive_task_from_queue():
connection = await connect_robust(
"amqp://guest:guest@127.0.0.1/",
client_properties={"connection_name": "callee"},
)
channel = await connection.channel()
await channel.set_qos(prefetch_count=1)
rpc = await RPC.create(channel)
await rpc.register("main", main, auto_delete=True)
return connection
Код продюсера:
async def run_rabbitmq_queue():
connection = await connect_robust(
"amqp://guest:guest@127.0.0.1/",
client_properties={"connection_name": "caller"},
)
async with connection:
channel = await connection.channel()
rpc = await RPC.create(channel)
await rpc.proxy.main()