我是Python和协程的新手,我正在尝试利用Python的asyncio库来并行处理阻塞函数。我正在使用 python 3.8.6。我有一个阻塞函数,它从数组输入中接收不同的输入,我需要每个输入的阻塞函数同时运行。我已经尝试过,但它们似乎仍然按顺序运行:
async def main():
tasks = [asyncio.create_task(blocking_function(input)) for input in inputs]
result = await asyncio.gather(*tasks)
print(result)
任何阻塞函数都必须包装在异步环境中作为可等待函数有意义的东西中。
最简单的方法是使用
loop.run_in_executor
调用,它将在单独的线程(甚至在单独的进程中)中调用阻塞代码 -
import asyncio
...
async def main():
loop = asyncio.get_running_loop()
tasks = [asyncio.create_task(loop.run_in_executor(None, blocking_function, input)) for input in inputs]
result = await asyncio.gather(*tasks)
print(result)