pythonasyncio在哪个版本好_Python asyncio是什么?怎么用?

谈到异步库大家可能有点陌生,所以我们今天先从asyncio讲起,便于大家的理解。

最简单的使用

import asyncioasync def myfun(i):

print('start {}th'.format(i))

await asyncio.sleep(1)

print('finish {}th'.format(i))loop = asyncio.get_event_loop()

myfun_list = (myfun(i) for i in range(10))

loop.run_until_complete(asyncio.gather(*myfun_list))

这样运行,10次等待总共只等待了1秒。

上面代码一些约定俗成的用法记住就好,如要想异步运行函数,需要在定义函数时前面加async

后三行都是记住就行,到时候把函数传入

另一种常见的使用方式

上面是第一种常见的用法,下面是另外一种import asyncioasync def myfun(i):

print('start {}th'.format(i))

await asyncio.sleep(1)

print('finish {}th'.format(i))loop = asyncio.get_event_loop()myfun_list = [asyncio.ensure_future(myfun(i)) for i in range(10)]loop.run_until_complete(asyncio.wait(myfun_list))

这种用法和上面一种的不同在于后面调用的是asyncio.gather还是asyncio.wait,当前看成完全等价即可,所以平时使用用上面哪种都可以。

上面是最常看到的两种使用方式,这里列出来保证读者在看其他文章时不会发蒙。

另外,二者其实是有细微差别的gather更擅长于将函数聚合在一起

wait更擅长筛选运行状况

一个问题

与之前学过的多线程、多进程相比,asyncio模块有一个非常大的不同:传入的函数不是随心所欲比如我们把上面myfun函数中的sleep换成time.sleep(1),运行时则不是异步的,而是同步,共等待了10秒

如果我换一个myfun,比如换成下面这个使用request抓取网页的函数import asyncioimport requestsfrom bs4 import BeautifulSoupasync def get_title(a):

url = 'https://movie.douban.com/top250?start={}&filter='.format(a*25)

r = requests.get(url)

soup = BeautifulSoup(r.content, 'html.parser')

lis = soup.find('ol', class_='grid_view').find_all('li')

for li in lis:

title = li.find('span', class_="title").text

print(title)loop = asyncio.get_event_loop()fun_list = (get_title(i) for i in range(10))loop.run_until_complete(asyncio.gather(*fun_list))

依然不会异步执行。

以上就是Python中asyncio的详解。更多Python学习推荐:JQ教程网Python大全。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值