介绍
本篇文章给大家分享的是有关Python中的协程是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。
<强>线程和进程的操作是由程序触发系统接口,最后的执行者是系统,协程的操作则是程序员。强>
协程存在的意义:对于多线程应用,CPU通过切片的方式来切换线程间的执行,线程切换时需要耗时(保存状态,下次继续)。协程,则只使用一个线程,在一个线程中规定某个代码块执行顺序。
协程的适用场景:当程序中存在大量不需要CPU的操作时(IO),适用于协程;
事件循环是协程执行的控制点,如果你希望执行协程,就需要用到它们。
事件循环提供了如下的特性:
注册,执行,取消延时调用(异步函数)
创建用于通信的客户端和服务器协议(工具)
创建和别的程序通信的子进程和协议(工具)
把函数调用送入线程池中
协程示例:
import asyncio ,, async def  cor1 (): ,,,print (“COR1 时) ,,,await cor2 () ,,,印刷(“COR1 以何种) ,, async def  cor2 (): ,,,印刷(“COR2") ,, 时间=loop asyncio.get_event_loop () loop.run_until_complete (cor1 ()) loop.close ()
最后三行是重点。
asyncio.get_event_loop (),:asyncio启动默认的事件loop
run_until_complete (),:,这个函数是阻塞执行的,知道所有的异步函数执行完成,
关闭(),:,关闭事件循环。
<强> 1,一种绿色小鸟强>
import 一种绿色小鸟 def fun1 (): ,,,print (“12”) ,,,gr2.switch () ,,,print (“56”) ,,,gr2.switch () ,, def fun2 (): ,,,print (“34“) ,,,gr1.switch () ,,,print (“78”) ,, ,, 时间=gr1 greenlet.greenlet (fun1) 时间=gr2 greenlet.greenlet (fun2) gr1.switch ()
<强> 2,gevent 强>
gevent属于第三方模块需要下载安装包
pip3 install ——upgrade pip3 pip3 install  gevent
import gevent ,, def fun1 (): ,,,印刷(“www.baidu.com"),,, #,第一步 ,,,gevent.sleep (0) ,,,print(“最终获得,baidu.com"),, #,第三步 ,, def fun2 (): ,,,印刷(“www.zhihu.com"),,, #,第二步 ,,,gevent.sleep (0) ,,,print(“最终获得th zhihu.com"),, #,第四步 ,, gevent.joinall ([ ,,,gevent.spawn (fun1), ,,,gevent.spawn (fun2), )
遇到IO操作自动切换:
import gevent import 请求 def func (url): ,,,print(“得到:% s" % url) ,,,gevent.sleep (0) ,,,date =requests.get (url) ,,,ret =date.text ,,,print (url, len (ret)) gevent.joinall ([ ,,,gevent.spawn (func, & # 39; https://www.pythontab.com/& # 39;), ,,,gevent.spawn (func, & # 39; https://www.yahoo.com/& # 39;), ,,,gevent.spawn (func, & # 39; https://github.com/& # 39;), ])
以上就是Python中的协程是什么,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注行业资讯频道。