| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Python知识库 -> 用python编写nmap扫描工具--采用协程的方式 -> 正文阅读 |
|
[Python知识库]用python编写nmap扫描工具--采用协程的方式 |
????上一章节,我们采用多线程的技术去进行服务器端口的扫描,遗留了一些问题待优化,今天,我们采用协程的方式去尝试一下是否解决这个问题。 ???? ????协程是一种轻量级的线程,协程拥有自己的寄存器上下文和栈。协程调度切换时,将寄存器上下文和栈保存到其他地方,在切回来的时候,恢复先前保存的寄存器上下文和栈。因此:协程能保留上一次调用时的状态,每次过程重入时,就相当于进入上一次调用的状态。也就是说同一线程下的一段代码执行着执行着就可以中断,然后跳去执行另一段代码,当再次回来执行代码块的时候,接着从之前中断的地方开始执行。 ???? 协程的优点: 1、执行效率高,尤其是在线程数较多的情况下,与多线程对比的优势更明显 2、不需要多线程的锁机制,因为只有一个线程,也不存在同时写变量冲突,在协程中控制共享资源不加锁,只需要判断状态就好,因为执行效率比多线程高很多。 缺点: 1、无法利用多核资源:协程的本质是个单线程,它不能同时将 单个CPU 的多个核用上,协程需要和进程配合才能运行在多CPU上.当然我们日常所编写的绝大部分应用都没有这个必要,除非是cpu密集型应用。 2、进行阻塞(Blocking)操作(如IO时)会阻塞掉整个程序 接下来,让我们通过一段代码来看一下运行的效果:
以上代码执行的时候,输出结果如下:
是不是跟预想的不一样呢,是的,因为程序执行没有阻塞/中断,所以打印结果没有交叉打印 ,把time.sleep(1)放开后,再执行:
打印结果如下:
代码说明: 本次采用gevent库实现协程的相关操作,在使用之前需要先安装该插件。 安装命令:pip install gevent gevent.spawn()函数:创建协程对象 gevnet.joinall([传入携程对象列表]):会等待所有协程对象运行结束后再退出 接下来改造端口扫描的代码,采用协程的方式实现:
相关文章都是边学习边整理的笔记,如有错误,欢迎指正。如需进学习交流群,或者互相交流,文章催更,商务合作等,可添加微信xiaobotester ,记得备注一下。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 | -2024/12/25 14:57:46- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |
数据统计 |