栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

【python】基础知识巩固(十一)协程补充

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【python】基础知识巩固(十一)协程补充

关于携程在上一篇文章,我觉得讲的不太清楚,自己也不太满意,所以写了这篇补充,我自己也参考很多文档,最终写完这篇补充

目录

概念:

补充:

例子 :

1.greenlet实现

2.yield实现

3.asyncio装饰器实现(py 3.4)

async 和 await关键字(py 3.5)


概念:

前面的文章说

 简单来说就是 类似goto的函数,协程可以在一个函数内部跳到另外的函数的东西

来回切换

补充:

1)在操作系统中,并不存在协程,只有线程和进程,协程只是我们程序员自己定义的东西

例子 :

我们有三种在python的写法

1.greenlet实现

早期模块

""" 
CSDN : heart_6662
PYTHON amateur   
"""
from greenlet import greenlet
def func1():
    print(1)   #第二步 输出1
    gr2.switch()  # 第三步切换到func2函数
    print(2)    #第六步, 输出2
    gr2.switch()    #第七步,切换到func2函数,从上次执行的位置继续往后执行

def func2():
    print(3)   #第四步,输出3
    gr1.switch() #第五步,切换到func1函数,从上次执行的位置继续往后执行  
    print(4) #第八步,输出4

gr1 = greenlet(func1())
gr2 = greenlet(func2())
gr1.switch()   #第一步,执行func1函数

输出:1 3 2 4 

2.yield实现

yield from 去到哪里的意思

"""
CSDN : heart_6662
PYTHON amateur
"""

def func1():
    yield 1
    yield from func2()
    yield 2

def func2():
   yield 3
   yield 4

f1 = func1()
for  item in f1:
    print(item)

输出 1 3 2 4 

3.asyncio装饰器实现(py 3.4)

现在基本上不用了,过时了,注意3.8python已经替代了coroutine关键字了

"""
CSDN : heart_6662
PYTHON amateur
"""
import asyncio

@asyncio.coroutine
def func1():
    print(1)
    yield from asyncio.sleep(2)# 遇到io耗时(阻塞),自动化切换到tasks中的任务
    print(2)
    
@asyncio.coroutine
def func2():
    print(3)
    yield from asyncio.sleep(2)  # 遇到io耗时(阻塞),自动化切换到tasks中的任务
    print(4)

tasks = [asyncio.ensure_future(func1()),
         asyncio.ensure_future(func2())]

loop = asyncio.get_event_loop()
loop.run_until_complete(asyncio.wait(tasks))

async 和 await关键字(py 3.5)

推荐

"""
CSDN : heart_6662
PYTHON amateur
"""
import asyncio


async def func1():
    print(1)
    await asyncio.sleep(2)# 遇到io耗时(阻塞),自动化切换到tasks中的任务
    print(2)
    

async def func2():
    print(3)
    await asyncio.sleep(2)  # 遇到io耗时(阻塞),自动化切换到tasks中的任务
    print(4)

tasks = [asyncio.ensure_future(func1()),
         asyncio.ensure_future(func2())]

loop = asyncio.get_event_loop()
loop.run_until_complete(asyncio.wait(tasks))

输出 1 3 2 4

与上面的操作一样 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/700209.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号