有些问题:
async def run():
await asyncio.ensure_future(p.packing()) #非阻塞
await asyncio.gather(*tasks) #阻塞
先解释几个名词:
同步与异步:同步需要等待IO返回的结果,异步不需要IO返回的结果
阻塞与非阻塞:阻塞 程序要等待,非阻塞 程序做其他任务
效果比较:
同步阻塞 = 异步阻塞 < 同步非阻塞 < 异步非阻塞
并发与并行:
并发:协程, 多个任务同时进行, 并行:线程、进程,同一时间做多个任务
async 定义协程函数
await IO费时间的任务进行挂起(异步)
使用同步方式进行异步化包装 loop.run_in_executor(executors, fun, *args)
import concurrent.futures as cf # 多加一个模块
import asyncio
import time, requests
def fun(i, url):
r = requests.get(url)
print(i, '|', r)
return r
async def main():
with cf.ThreadPoolExecutor(max_workers=10) as executor: #10个进程
loop = asyncio.get_event_loop()
futures = (
loop.run_in_executor(
executor,
fun, #函数
i, "http://127.0.0.1:5000/") for i in range(10))
for t in await asyncio.gather(*futures):
print(t)
s_time = time.time()
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
print(time.time() - s_time)
asyncio 一个不错的包,目前只了解了一些皮毛