什么是协程
协程我们可以看做是一种用户空间的线程。
操作系统对齐存在一无所知,需要用户自己去调度。
比如说进程,线程操作系统都是知道它们存在的。协程的话是用户空间的线程,操作系统是不知道的。
为什么要使用协程
与线程不同,协程是自己主动让出cpu,并交付它期望的下一个协程运行,而不是在任何时候都有可能被系统调度打断。因此协程的使用更加清晰易懂,并且多数情况下不需要锁机制。与线程相比,协程的切换由程序控制,发生在用户空间而非内核控件,因此切换的代价非常的小。某种意义上,协程与线程的关系类似与线程与进程的关系,多个协程会在同一个线程的上下文之中运行。这样程序不多线程好理解。来看一个视图。
比如说一个进程它有多个线程,但是一个线程内它又有多个协程,然后这些协程就是说,有用户,就是程序员来说定义它在什么时候交出控制权,给其它协程来进行一些操作。
gevent简介
Python一个很著名的一个协程库就是gevent。gevent是一个基于libev的并发库。它为各种并发和网络相关的任务提供了郑洁的API。在gevent中用到的主要模式是Greenlet,它是以C扩展模块形式接入Python的轻量级协程。Greenlet全部运行在主程序操作系统进程的内部,但它们被协作式地调度。
Python gevent API
gevent.spawn(func,args)创建greenlet
gevent.sleep(seconds)greenlet上下文切换
gevent.joinall(greenlets)阻塞当前流程,执行所有给定greenlet
我们来看一下视图。
比如说这段代码它得执行是这样的,不如说它gevent创建出来的协程它sleep就是切换出来,就会到其它程序中去运行。然后其它程序再会让它在切换回来,它再回到原来的流程去运行这样,就做了一个交互式的操作。这样这张图就很明白的表名了这些。
利用gevent实现
对原有操作进行修改,手动切换。
就是把这个程序切换出去,然给其它协程去操作。
打开编辑器
怎么改呢,这个是原来的查询远程机器的配置,这个比如说查询它的当前的时间。Data的话我们,这个都是在之前的课程讲过。Process比如说ssh它这个配置把它的section传过去。
比如说ssh0
然后我们如何修改呢,其实就是在原有的基础上让它手动的去切换,怎么切换我们就gevent_process,例如说创建出这个对象我就把它切换出去,切换出去的时候,首先要引入这个gevent这个库,调用它的sleep让它手动的切换出去。不如说connect的时候在切换出去。
创建gevent协程
然后我们就开始在主函数里面。 就建立协程,建立协程其实很简单比如它一个event=gevent.spawn,把协程的函数和它的参数传递进来。比如说它就是一个ssh0
不如说我们让它joinall,joinall是一个数组,然后这我们应该申请一个events,把新请的这个events放进来。我们把这个events阻塞,让这个进程等待所有协程的结束。我们看一下。
多个协程的话就非常简单了,我们以前也看到过,比如说这个task_num是6我们就把它遍历,然后这个section就是这个样子就是ssh+str(i)
然后把section传递进去,我们可以看到比如说我们可以查询六次,对六个机器进行查询。
然后我们这样就完成了,我们可以看一下它的耗时,把它耗时给打印出来,就是两个的时间差
它花费了3.80秒,我们下去的话大概可以根据之前的经验,把这个顺序执行跟这个协程式的执行,协程式的具体来说就是就是这台机器服务器的状态。这个过程它所发生时间其实它还是一个时间优势的,只不过是在这个地方它是时间优势体现的不明显,是因为我们只有在应用进程,然后在主动的去切换这个协程。然后在这parmiko的内部我们其实是没办法用,利用这个协程的切换来,因为它内部是封装起来的。只允许调用它现有的这些函数,我们中间是没办法打断它的。
只有在这个具体的执行的时候,比如说两个run_cmd之间我们可以加一个协程让它切出去,比如说我这有查询一个其它的。
比如说之前的查询它的内存,我可以在这在切一次。
这样的话就主动地切换,就是说利用协程之间的操作的话,如果多个协程之间 我们这样切换的话它其实最终的效果是比顺序执行的时候要好,它是利用了协程的这个有点。
等待gevent协程结束。
相关推荐
python及paramiko模块安装包及安装步骤,附件是四个安装文件 python-2.7.6.msi(python安装文件), pycrypto-2.6.win32py2.7.exe(pycrypto模块安装文件), ecdsa-0.10.tar.gz, paramiko-1.12.1.tar.gz 安装步骤:...
主要介绍了python使用paramiko实现ssh的功能详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
paramiko是用python写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接。利用该模块,可以方便的进行ssh连接和sftp协议进行sftp文件传输以及远程命令执行。 安装paramiko也很简单,我用的...
官方离线安装包,亲测可用。使用rpm -ivh [rpm完整包名] 进行安装
支持在windows下的python paramiko库
python3.6 安装paramiko,所需要的whl文件,适合内网安装,几个导入即可安装。 亲测,尝试半天后找到的可用whl安装包
pip安装不了的时候可以用该安装包进行安装。里面有安装包以及paramiko模块的详细安装过程。
官方离线安装包,亲测可用。使用rpm -ivh [rpm完整包名] 进行安装
windows_python3.7离线安装paramiko2.7.2全文件
python使用paramiko实现ssh的功能详解.docx
python使用paramiko模块通过ssh2协议对交换机进行配置的方法.docx
第九周-第02章节-Python3.5-paramiko模块详解1.avi
第九周-第03章节-Python3.5-paramiko模块详解2.avi
官方离线安装包,亲测可用。使用rpm -ivh [rpm完整包名] 进行安装
docker export 0b3b1b7697ca > alpine_python27_paramiko.tar 2、为了节省空间,节省流量,将 .tar文件再次压缩成 .7z 3、上传csdn空间 4、恢复使用,将 alpine_python27_paramiko.7z解压成 alpine_python27_...
官方离线安装包,亲测可用
今天小编就为大家分享一篇python使用paramiko模块通过ssh2协议对交换机进行配置的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
支持ssh 、sftp 访问 上传下载,安装paramiko有两个先决条件,python和另外一个名为PyCrypto的模块,所以在安装玩python之后先安装pycrypto
主要介绍了python使用paramiko实现远程拷贝文件的方法,分析了paramiko库的安装以及远程下载文件的实现技巧,需要的朋友可以参考下
离线安装包,亲测可用