运行 协程中的阻塞任务
Run blocking task in coroutine
我有一台服务器从 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())
要与 SQS 集成,最好使用 aiobotocore
库 - asyncio 兼容的 AWS 驱动程序。以下是 SQS 用法示例:http://aiobotocore.readthedocs.io/en/latest/examples.html#sqs
一般来说,如果您必须使用具有阻塞函数调用的外部库 - 使用 asyncio executors API,它将阻塞调用委托给线程池。
我有一台服务器从 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())
要与 SQS 集成,最好使用 aiobotocore
库 - asyncio 兼容的 AWS 驱动程序。以下是 SQS 用法示例:http://aiobotocore.readthedocs.io/en/latest/examples.html#sqs
一般来说,如果您必须使用具有阻塞函数调用的外部库 - 使用 asyncio executors API,它将阻塞调用委托给线程池。