最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • Python asyncio是什么?怎么用?

    正文概述    2020-09-14   315

    谈到异步库大家可能有点陌生,所以我们今天先从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://img.qiyuandi.com/images/10/pythotop250    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学习推荐:起源地模板网教学中心



    起源地下载网 » Python asyncio是什么?怎么用?

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元