资讯专栏INFORMATION COLUMN

python3 使用 asyncio 代替线程

bergwhite / 3576人阅读

摘要:提供了协程专用的关键字还提供了库来进行异步非阻塞的操作异步非阻塞的操作没有老师检查我也不知道自己算不算完全懂了就不做无用功尝试说得通俗易懂了想要从原理开始理解的话推荐的文档我为何使用来代替传统线程进行操作由于时间主要耗费在操作上其他操作并发

python3提供了协程专用的关键字async await, 还提供了asyncio库, 来进行异步非阻塞的io操作
异步非阻塞的io操作?

没有老师检查我也不知道自己算不算完全懂了, 就不做无用功尝试说得通俗易懂了.
想要从原理开始理解的话, 推荐tornado的文档

我为何使用asyncio来代替传统线程进行io操作?

由于时间主要耗费在io操作上, 其他操作并发需求不大.

不用规定并行多少, 比较方便稳定.

熟悉tornado工作原理

举例

并行访问某网页十次

import asyncio
import requests
loop = asyncio.get_event_loop()
async def t():                                                    
    get = lambda:requests.get("http://baidu.com")
    temp = await loop.run_in_executor(None, get)
    print(temp)   
loop.run_until_complete(asyncio.gather(*[t() for i in range(10)]))

上面这几行代码就可以完成这些操作了.

loop = asyncio.get_event_loop() 协程本身并不具备并行能力, 但是有了这个事件loop就可以进行并行io请求

get = lambda:requests.get("http://baidu.com")
temp = await loop.run_in_executor(None, get)

一般函数是无法被await修饰的, 必须用api封装一下(感觉很像threading), 我之所以再封装一次get, 是因为run_in_executor传参数比较坑, 不支持**kwargs

loop.run_until_complete(asyncio.gather(*[t() for i in range(10)]))

run_until_complete这个api是指运行内容物直到结束(api如其名), gather是把任务组合到一起, 如果*的部分有迷惑的话, 你写asycio.gather(t(),t(), t()...)也是可以的.

おわり.

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/41341.html

相关文章

  • Python协程(真才实学,想学的进来)

    摘要:所以与多线程相比,线程的数量越多,协程性能的优势越明显。值得一提的是,在此过程中,只有一个线程在执行,因此这与多线程的概念是不一样的。 真正有知识的人的成长过程,就像麦穗的成长过程:麦穗空的时候,麦子长得很快,麦穗骄傲地高高昂起,但是,麦穗成熟饱满时,它们开始谦虚,垂下麦芒。 ——蒙田《蒙田随笔全集》 上篇论述了关于python多线程是否是鸡肋的问题,得到了一些网友的认可,当然也有...

    lykops 评论0 收藏0
  • Python中的并发处理之使用asyncio

    摘要:并发用于制定方案,用来解决可能但未必并行的问题。在协程中使用需要注意两点使用链接的多个协程最终必须由不是协程的调用方驱动,调用方显式或隐式在最外层委派生成器上调用函数或方法。对象可以取消取消后会在协程当前暂停的处抛出异常。 导语:本文章记录了本人在学习Python基础之控制流程篇的重点知识及个人心得,打算入门Python的朋友们可以来一起学习并交流。 本文重点: 1、了解asyncio...

    tuniutech 评论0 收藏0
  • tornado6与python3.7 异步新姿势

    摘要:这是我重新复习的原因放弃了之前自己实现的全面拥抱的这个改动是非常大的而且阅读的源码可以发现其中大部分函数都支持了类型检验和返回值提示值得阅读 废话不多说,直接上代码 __auth__ = aleimu __doc__ = 学习tornado6.0+ 版本与python3.7+ import time import asyncio import tornado.gen import t...

    maxmin 评论0 收藏0
  • Tornado 4.3文档翻译: 用户指南-协程

    摘要:译者说于年月日发布,该版本正式支持的关键字,并且用旧版本编译同样可以使用这两个关键字,这无疑是一种进步。其次,这是最后一个支持和的版本了,在后续的版本了会移除对它们的兼容。 译者说 Tornado 4.3于2015年11月6日发布,该版本正式支持Python3.5的async/await关键字,并且用旧版本CPython编译Tornado同样可以使用这两个关键字,这无疑是一种进步。其次...

    SimonMa 评论0 收藏0

发表评论

0条评论

bergwhite

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<