python3 asyncio 不阻塞_Python3 asyncio异步框架,让我崩溃的点

有些问题:

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 一个不错的包,目前只了解了一些皮毛

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值