在日常开发中,很有可能在一个一直使用异步编程的工程代码中会不得已使用非异步编程的代码,那么这个时候怎么办呢,有什么办法转化吗?下面直接看代码
import asyncio
import concurrent.futures
import time
def func():
time.sleep(3)
print("test....")
return "this is result"
async def main():
# 获取已经执行的事件循环 get_running_loop是在3.7以后版本中出现的
# loop = asyncio.get_running_loop()
loop = asyncio._get_running_loop()
# 将非异步功能转换(就是使用线程池(默认)或进程池转换为concurrent.futures.Future对象,然后再asyncio的方法转换为future对象)
fut = loop.run_in_executor(None, func)
print(type(fut))
result = await fut
print("default use threadpool:>>>>>>", result)
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
在我们日常工作中,如果某个异步编程代码因为某个同步程序阻塞,会给程序性能带来不小的影响,所以使用异步asyncio可以将同步转换,以提升效果