进程和线程都是由操作系统控制调度的, 协程是是函数级别的调度,可以由程序员写代码控制

python中使用async和await两个关键字来支持原生协程

# python后期使用async和await两个关键字来定义协议,  这样就可以与生成器表示区别开来, 语义也更加明确
# 底层也是使用生成器来实现协程的
# 协议是函数级别的

# async 使用这个关键字定义一个协程
# await 相当于生成器的yield from

async def downloader(url):
    # to do something
    return 'html content'


async def download_url(url):
    # to do something
    html = await downloader(url)
    return html


if __name__ == '__main__':
    coro = download_url('http://www.baidu.com')
    try:
        coro.send(None)
    except StopIteration as e:
        print(e.value)  #html content

 

协程的性能并不比epoll+回调+事件循环的方式高

协程主是是解决编码习惯问题, 使用协程可以不用写回调函数

posted on 2019-12-28 20:58  显示账号  阅读(134)  评论(0编辑  收藏  举报