文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Python协程怎么实现

2023-07-05 18:33

关注

这篇文章主要讲解了“Python协程怎么实现”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python协程怎么实现”吧!

1.协程

协程不是计算机提供的,计算机只提供:进程、线程。协程时人工创造的一种用户态切换的微进程,使用一个线程去来回切换多个进程

实现协程的几种方法

1.1greenlet实现协程

pip install greenletfrom greenlet import greenletdef fun1():  gre2.switch()#切换到fun2  passdef fun2():  gre1.switch()#切换到fun1  passgre1 = greenlet(func1)gre2 = greenlet(func2)gre1.switch()#先去执行fun1

1.2yield关键字实现协程

def func1():    yield 1    yield from func2()    yield 2    def func2():    yield 3    yield 4f1 = func1()for item in f1:    print(item,end=" ")    #打印结果1 3 4 2

1.3使用asyncio模块实现协程

再python3.4版本之后才可以用(不用安装,在标准库中)

import asyncio#使用该装饰器装饰后,该函数就是一个协程函数@asyncio.coroutinedef func1():    print(1)    #遇到IO操作时,会自动切换到taks中的其他任务函数    yield from asyncio.sleep(2)    print(2)@asyncio.coroutinedef func2():    print(3)    yield from asyncio.sleep(2)    print(4)    #将两个协程函数封装成一个tasks列表tasks = [    asyncio.ensure_future(func1()),    asyncio.ensure_future(func2())]#loop = asyncio.get_event_loop()loop.run_until_complete(func1())

1.4async & await关键字实现协程

import asyncio#使用该装饰器装饰后,该函数就是一个协程函数async def func1():    print(1)    #遇到IO操作时,会自动切换到tasks中的其他任务函数    await asyncio.sleep(2)    print(2)async def func2():    print(3)    await asyncio.sleep(2)    print(4)    #将两个协程函数封装成一个tasks列表tasks = [    asyncio.ensure_future(func1()),    asyncio.ensure_future(func2())]loop = asyncio.get_event_loop()loop.run_until_complete(tasks)

2.协程意义

在线程中如果遇到IO等待时间,线程不会傻等着,会利用空闲的时间去做其他事情,也就是进程异步执行。

#协程请求资源使用第三方库aiohttpimport aiohttp

3.异步编程

3.1时间循环

理解成一个死循环,去检测并执行某些代码

#伪代码任务列表 = [task1,task2...]while True:  for 就绪任务 in 可执行任务列表:    执行  for 已完成任务 in 已完成任务列表:    从任务列表中删除import asyncio #生成一个书简循环loop = asyncio.get_event_loop()#将任务放到任务列表中loop.run_until_complete(任务)

3.2案例

协程函数,

定义函数的时候,用async def 函数名

协程对象:执行协程函数的时候得到一个协程对象

async def func():  passresult = func()

注意:执行协程函数时得到的协程对象,函数内部代码不会执行

import asyncioasync def func():  print("哈喽")f = func()#协程对象loop = asyncio.get_event_loop()#创建循环对象loop.run_until_complete(f)#通过循环对象执行协程对象#python3.7可以直接asyncio.run(f)

3.3await关键字

await + 可等待的对象 {协程对象,Future对象,Task对象} (类似于I O 等待)

import asyncioasync def func():  print("哈喽")  re = await asyncio.sleep(2)print(re)asyncio.run(func())

await就是等待对象的值得到结果后再继续向下执行

import asyncioasync def other():  print("start")  await asyncio.sleep(2)  print("end")  return 1async def fun():  print("执行协程函数内部代码")  #遇到IO操作时会挂起当前协程任务,等IO操作完成后再继续往下执行,当前协程挂起时,时间循环对象可以执行其他协程任务  re = await other()  print("IO请求结束,结果为:",re)  asyncio.run(func())

执行结果 

执行协程函数内部代码
start
end
IO请求结束,结果为: 1

感谢各位的阅读,以上就是“Python协程怎么实现”的内容了,经过本文的学习后,相信大家对Python协程怎么实现这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯