python3.5协程

py2.x协程

  • yield:py2.x的协程都是通过yield生成器来实现的,可以说是模拟的协程(不能跨堆栈),yield可以暂停函数执行,send通知函数继续往下执行,并提供给yield值,yield和send这种交互就构成了协程的基础.

    2.x系列理解yield就理解协程,参考 http://blog.csdn.net/secretx/article/details/43969101 或者看书"编写高质量代码python代码的99个建议"其中有一节讲yield很不错

  • gevent 2系列协程的王牌产品
    gevent 的两个关键的部件:hub和loop。loop是Gevent 的核心部件,也就是事件循环核心,默认是用Cython写的libev的包装。hub则是一个greenlet,主协程,其他子协程由他创建并且调度,所有子协程交出CPU使用权都给他,他再给非阻塞的可执行的其他子协程,里面跑着loop。

py3.4 asyncio

  • Python 3.3引入yield from(PEP 380),简单点说就是可以在协程里写return,另一个协程里yield from接收这个return值
  • Python3.4引入asyncio, asyncio是一个事件循环,类似libev,或者类比tornado的IOloop或者gevent的loop,hub,用来调度协程,同时使用@asyncio.coroutine来把函数装饰成协程,搭配上yield from实现基于协程的异步并发,此时协程还是靠yield模拟

py3.5协程

  • async/await,  3.5引入的新东西,就简单看成asyncio/yield from的升级版吧,在语言层面直接用async await提供对协程了支持,此后协程会与生成器yield分开界限

  • async def  定义一个协程func

    >>> async def coro():
    ...     return 'spam'

  • await  挂起当前协程用于非阻塞等待某个事件,比如IO;async for用于异步迭代其他协程返回的结果

    import asyncio
    async def httpget(domain): reader, writer = await asyncio.open_connection(domain,80)#等待链接成功 writer.write(b'\r\n'.join([b'GET / HTTP/1.1', b'Host: %b' % domain.encode('latin-1'), b'Connection: close', b'', b''])) async for line in reader:#异步迭代 print('>>>', line) writer.close()
    loop = asyncio.get
    eventloop() try: loop.run_until_complete(httpget('example.com')) finally: loop.close()

  • async with    asynchronous context managers,与with类似,仅仅用于管理协程的上下文环境

    import asyncio
    async def coro(name, lock):
        print('coro {}: waiting for lock'.format(name))
        async with lock:
            print('coro {}: holding the lock'.format(name))
            await asyncio.sleep(1)
            print('coro {}: releasing the lock'.format(name))
    loop = asyncio.get_event_loop() lock = asyncio.Lock() coros = asyncio.gather(coro(1, lock), coro(2, lock))
    try: loop.run_until_complete(coros) finally: loop.close()
    输出结果
    coro 2: waiting for lock
    coro 2: holding the lock
    coro 1: waiting for lock
    coro 2: releasing the lock
    coro 1: holding the lock
    coro 1: releasing the lock
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Python 3.5是一种编程语言的版本,它是Python语言的一种较新较完善的版本。Python是一种面向对象、解释型高级编程语言,因其代码简洁、易读性高,得到了广泛的应用。而CSND,则是一个较为专业的IT技术社区,旨在为开发者和技术爱好者提供一个分享和交流的平台,满足他们自我提升与成长的需求。在CSND上,我们可以了解到Python 3.5的最新开发技术、语法和库,还可以了解到Python在不同领域的应用,例如 人工智能、数据分析、网络编程等。除此之外,我们还可以在中国区的Python专区、Python教程、错误与解决方案等板块中,找到各种开发相关的资讯和教程手册,加速我们的学习和应用。总之,Python 3.5在CSND上的介绍和资源为开发者和技术爱好者们提供了很好的学习和交流平台,促进了Python语言在各个领域的广泛应用。 ### 回答2: Python是一种高级编程语言,既能作为脚本语言,又能够用于大量的面向对象的编程任务。CSDN作为中国领先的技术社区,致力于为 IT 技术人员提供持久的学习和交流平台。Python 3.5是Python编程语言的一个版本,其中包含许多新的特性和改进,比如协程、超时处理、模块导入改进等等。此外,Python 3.5还提供了更好的性能和稳定性,因此它被广泛运用于各个领域,包括自动化测试、数据科学、网络编程和Web开发等等。CSDN为Python开发者提供了一个庞大的交流社区,人们可以在这里分享他们的经验和知识,交流和讨论各种Python编程技巧。通过CSDN,人们可以学习到Python在不同领域中的应用,以及基于Python的多种开源工具和框架的使用。总之,Python 3.5和CSDN结合起来,成为一种强大的工具,支持Python开发者在不断提升自己和分享知识的同时,打造更出色的应用程序和项目。 ### 回答3: Python 3.5是Python编程语言的一个版本,它新增了许多有用的特性和改进了一些不足之处。Python是一种高级编程语言,易于阅读和理解,并且广泛应用于科学计算、数据分析、Web开发和人工智能等领域。 CSDN是中国最大的IT社区和开发者服务平台,提供各种技术文章、教程、论坛等服务,汇集了众多IT从业者和开发者的技术分享和交流。 Python 3.5在CSDN上是一个广受欢迎的话题,因为它是一款强大的编程语言,可以用于各种应用和项目。CSDN上的Python 3.5文章和教程可以帮助初学者快速入门,更了解Python的新特性和语法规则,并掌握Python在不同领域的应用方法。此外,CSDN还提供了丰富的Python 3.5资源,包括库、框架和工具,方便开发者开展各种Python项目。 总之,Python 3.5和CSDN是两个对于IT从业者和开发者来说非常重要的资源,Python 3.5让程序员快速进入Python程序开发的领域,而CSDN则提供了丰富的学习、交流和资源平台,为Python 3.5程序员提供了一个的优秀的社区平台。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值