我有一个服务器,它使用长轮询从SQS队列读取消息,阻止协程执行。有没有办法让计划器在等待新消息时被阻止运行处理器?
import asyncio
import time
NUM_EXEC = 10
async def processor(i):
print (f"Starting {i}")
for n in range(10):
print(f"Processor {i} cycle {n}")
await asyncio.sleep(1)
async def scheduler():
for i in range(NUM_EXEC):
#Blocking SQS long poll
time.sleep(5)
#Run processor
await asyncio.ensure_future(processor(i))
loop = asyncio.get_event_loop()
loop.run_until_complete(scheduler())
答案 0 :(得分:4)
要与SQS集成,最好使用aiobotocore
库 - 与asyncio兼容的AWS驱动程序。以下是SQS用法的示例:video
通常,如果必须使用带阻塞函数调用的外部库 - 请使用http://aiobotocore.readthedocs.io/en/latest/examples.html#sqs,它将阻塞调用委托给线程池。