• python协程 详解


    python 3.5中使用语法糖 async 和 await 实现协程。

    协程这个概念和进程、线程类似,都是程序运行的方式。使用协程可以高效的处理IO密集的问题,因为不需要出让GIL锁,它比多线程的速度要快。

    如何以协程的方式运行一个函数?

    首先使用async语法糖定义一个

    async def async_function():
      return 1

    这个函数原本是types.FunctionType, 使用语法糖后编程types.CoroutineType,可以使用协程执行

    执行这样的函数不能直接调用,直接调用会返回一个coroutine object,而是需要调用

    loop = asyncio.get_event_loop()
    res = loop.run_until_complete(buy_potatos())
    loop.close()

    await关键字是什么作用?

    1、只有用async包裹的函数和生成器才可以使用await关键字

    2、await用于挂起自身协程,等待其他协程完成。所以如果要同时执行多次函数,函数里的所有操作都需要加上await关键字

    这样才可以实现异步而非阻塞

    3、await后面的对象需要是一个Awaitable,或者实现了相关的协议。

    所以有一些操作,如打开文件、请求网站、等待时间需要使用特殊的对象。一个类实现了__await__方法,那么通过它构造出来的实例就是一个Awaitable

    async def func():
    await asyncio.sleep(0.5) #使用await time.sleep(1)会报错
    print(1)

    tasks = [asyncio.ensure_future(func()) for i in range(10)]
    loop = asyncio.get_event_loop()
    loop.run_until_complete(asyncio.wait(tasks))


    aiofiles.open(path, mode='wb')
  • 相关阅读:
    刚刚开通
    腾讯面试经历2015
    排序之归并排序
    AC自动机
    后缀数组初步
    概率dp初探
    【NOIP2015】反思+题解
    Built-in functions
    poj2528 Mayor's posters(线段树区间覆盖)
    Codeforces #317 C.Lengthening Sticks(数学)
  • 原文地址:https://www.cnblogs.com/yjybupt/p/14436969.html
Copyright © 2020-2023  润新知