请选择 进入手机版 | 继续访问电脑版
搜索
房产
装修
汽车
婚嫁
健康
理财
旅游
美食
跳蚤
二手房
租房
招聘
二手车
教育
茶座
我要买房
买东西
装修家居
交友
职场
生活
网购
亲子
情感
龙城车友
找美食
谈婚论嫁
美女
兴趣
八卦
宠物
手机

python--协程知识初识

[复制链接]
查看: 107|回复: 0

1万

主题

2万

帖子

4万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
46413
发表于 2019-11-9 18:06 | 显示全部楼层 |阅读模式
线程和进程的操纵是由步伐触发系统接口,末端的尝试者是系统;协程的操纵则是步伐员。
协程存在的意义:对于多线程利用,CPU经过切片的方式来切换线程间的尝试,线程切换时需要耗时(保存状态,下次继续)。协程,则只操纵一个线程,在一个线程中规定某个代码块尝试顺序。
协程的适用处景:当步伐中存在大量不需要CPU的操纵时(IO),适用于协程;
event loop是协程尝试的控制点, 假如你盼望尝试协程, 就需要用到它们。
event loop供给了以下的特征:
          1、注册、尝试、取消延时挪用(异步函数)
          2、建立用于通讯的client和server协议(工具)
          3、建立和此外步伐通讯的子进程和协议(工具)
          4、把函数挪用送入线程池中
协程示例一:
  1. 1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 """ 4 协程示例 5 """ 6 import asyncio 7  8 async def test1(): 9     print("test1, starting")10     await test2()11     print("test1, ending")12 13 async def test2():14     print("test2 start")15 16 loop = asyncio.get_event_loop()  #asyncio.get_event_loop()  : asyncio启动默许的event loop17 loop.run_until_complete(test1())  #run_until_complete()  :  这个函数是阻塞尝试的,晓得全数的异步函数尝试完成,18 loop.close()  #close()  :  封闭event loop。
复制代码

greenlet协程示例:
  1. 1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 """ 4 协程示例 5 """ 6 import greenlet 7  8 def fun1(): 9     print("12")10     f2.switch()11     print("56")12     f2.switch()13 14 def fun2():15     print("34")16     f1.switch()17     print("78")18 19 20 f1 = greenlet.greenlet(fun1)21 f2 = greenlet.greenlet(fun2)22 23 f1.switch()
复制代码

gevent协程示例:
  1. 1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 """ 4 gevent协程示例 5 """ 6 import gevent 7  8 def fun1(): 9     print("www.baidu.com")  #第一步10     gevent.sleep(0)11     print("end the baidu.com")  #第三步12 13 def fun2():14     print("www.yusheng.com")  #第二步15     gevent.sleep(0)16     print("end the yusheng.com")  #第四步17 18 gevent.joinall([19     gevent.spawn(fun1),20     gevent.spawn(fun2),21 ])
复制代码

示例三:碰到IO操纵自动切换:
  1. 1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 """ 4 碰到IO操纵自动切换: 5 """ 6 import gevent 7 import requests 8  9 def fun(url):10     print("get: %s" % url)11     gevent.sleep(0)12     data = requests.get(url)13     ret = data.text14     print(url, len(ret))15 16 gevent.joinall([17     gevent.spawn(fun, 'https://www.python.org/'),18     gevent.spawn(fun, 'https://www.yahoo.com/'),19     gevent.spawn(fun, 'https://github.com/'),20 ])
复制代码


免责声明:假如加害了您的权益,请联系站长,我们会实时删除侵权内容,感谢合作!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Copyright © 2006-2014 妈妈网-中国妈妈第一,是怀孕、育儿、健康等知识交流传播首选平台 版权所有 法律顾问:高律师 客服电话:0791-88289918
技术支持:迪恩网络科技公司  Powered by Discuz! X3.2
快速回复 返回顶部 返回列表