Python中的协程是什么

  介绍

本篇文章给大家分享的是有关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中的协程是什么,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注行业资讯频道。

Python中的协程是什么