一、 协程(Coroutine)技术1. 基本用法线程 :又叫 微线程 、 纤程 协程是一种用户级的轻量级线程 。 协程 拥有自己的寄存器上下文和栈。 协程调度切换时,将寄存器上下文和栈保存到其他地方,在切回来时,恢复先前保存的寄存器和栈。 优点: 协程极高的执行效率。 因为子程序切换不是线程切换,而是由程序自身控制,因此没有线程切换的开销,和多线程比,线程数量越多,协程的性能优势就越明显。 不需要多线程的锁机制 只有一个线程,也不存在同时写变量冲突,在协程中控制共享资源不加锁,只需要判断状态就可以,所以执行效率比多线程高很多。 缺点: 无法利用多核资源 协程的本质是个单线程,他不能同时将 单个 CPU 的多个核用上,协程需要和进程配合才能运行在多 CPU 上。(适用于 CPU 密集型 应用) 进行阻塞(Blocking) 操作(如 IO 时)会阻塞掉整个程序 2. geventgevent :一个现在很火、支持也会全面的 Python 第三方协程库。 由于切换是在 IO 操作时自动完成,所以 gevent 需要修改 Python 自带的一些标准库,这一过程在启动时通过 ...
一. 语法结构 12345public class Demo{ public static void main(String[] args) { System.out.println("你好,java"); }} 说明: Demo :表示一个类,类名为 Demo,与文件名相同 public: 表示一个公有的类 public static void main:表示一个主方法,即程序的入口(固定写法) System.out.println("你好,java"); : 表示输出到屏幕,“;”表示语句结束 Java 语言严格区分大小写; 每个语句都必须以 “ ;” 结束; 括号都是成对出现的; 一个源文件只能有 一个 public类,其他类的数量不限; 每一个类在编译完成后,都会生成一个 “ .class ” 文件 如果原文件包含 public 类,则文件名必须与 类名相同; 二. 常用的转义字符 字符 说明 案例 运行结果 \t 制表符 System.out.println(“北京\t 天 ...
一、元素定位 定位模式 是否脱标 移动位置 是否常用 static(静态定位) 不脱标 不能使用边偏移 很少 relative(相对定位) 不脱标(占有位置) 相对自身位置移动 常用 absolute(绝对定位) 脱标(不占有位置) 带有定位的父级 常用 fixed(固定定位) 脱标(不占有位置) 浏览器可视区 常用 sticky(粘性定位) 不脱标(占有位置) 浏览器可视区 当前阶段少 1. 定位的组成 定位 : 将盒子定在某个位置,所以 定位也是在摆放盒子,按照定位的方式移动盒子 定位 = 定位模式 + 边偏移 定位模式:指定一个元素在文档中的定位方式边偏移 : 决定了该元素的最终位置 语法: 1position: static | relative | absolute | fixed; 定位模式: 参数 含义 static 静态定位 relative 相对定位 absolute 绝对定位 fixed 固定定位 sticky 粘性定位 边偏移: 边偏移属性 示例 描述 top top: ...
一、浮动1. 浮动网页布局第一准则:多个块级元素纵向排列使用标准流,横向排列使用浮动 浮动:用于创建浮动框,将其移动到一边,直到边缘触及包含另一个浮动框的边缘 语法: 123选择器 { float: 属性值;} 属性值 描述 none 元素不浮动(默认) left 元素向左浮动 right 元素向右浮动 代码示例 12345678910111213141516171819202122232425262728293031323334<!DOCTYPE html><html lang="en"> <head> <meta charset="UTF-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta name="viewport ...
一、 安装 locust1pip install locust 验证是否安装成功1import locust 1. HttpUser(User)在 User 类中,具有一个client属性,它对应着虚拟用户作为客户端所具备的请求能力。 继承 HttpUser 类。HttpUser 是最常用的用户类。它添加了一个client属性,用于发出 HTTP 请求。 其 client 属性绑定了HttpSession类,而 HttpSession 又继承自requests.Session。 通过 client 属性来使用Python requests库的所有方法,调用方式也与 requests 完全一致。 client 的方法调用之间就自动具有了状态记忆的功能, 从而后续 HTTP 请求操作都能带上登录态。 虽然 Locust 仅内置了对 HTTP/HTTPS 的支持,但它可以扩展到测试几乎任何系统。只需要基于 User 类实现 client 即可。我们可以使用 locust-plugins ,这个是第三方维护的库,支持 Kafka、mqtt,webdriver 等测试。 2. TaskS ...
一、 什么是性能测试? 通过工具,找出或获得系统在不同工况下的性能指标值 性能测试过程中,重点是找出**性能指标**,而不再是找出 Bug, 性能测试的产出绝对不只是 Bug 案例:跑步 100 米,用时多少?运动员的心跳、步伐频率是多少? 跑步 100 米:业务场景 用时多少:响应时间 运动员的心跳、步伐:性能指标值 性能指标值和响应时间是否满足当前业务场景的最低要求(合格线) 二、 获取基准值假设当前有一个业务电商系统,下单业务,目前还不知道系统支持多少人同时下单,那么我们需要找到服务器能正常支持多少人同时下单 性能测试初始阶段(第一次做) 先把基础的性能指标值找出来(第一次性能测试也叫做基准测试) 比如:100 个人同时下单系统正常,但 120 个人同时下单就会出现部分请求的响应时间超长,连接异常 那么 100-120 范围内的某个值就是当前服务器能达到的性能指标值(基准值) 版本迭代,进行第二次做性能测试,重新跑一遍之前的性能脚本 又会得到一些性能指标值,对比上个版本的性能指标值,看是否有优化(性能变化) 假设这个时候 120 个人同时下单是正常的,150 个人才有异常 ...
一、 序列化器中的类属性字段序列化 中所定义的 类属性 字段,一般情况下与 模型类 字段 相对应 默认情况下,这些类属性字段既可以进行序列化输出,也可以进行反序列化输入 不需要输入(反序列化)、输出(序列化)的字段,则不需要定义,定义的字段 则必须出现在 fields 列表中 只需要反序列化输入,则定义 write_only = True 只需要序列化输出,则定义 read_only = True 响应的参数如果是多个查询集,需要在 JsonResponse() 中传参 many=True label:当前字段在前端的 api 页面中所显示的字段名称 allow_null = False:当前字段是否允许传 None,默认是 False(必填字段 False,反之则 True) allow_blank = False:当前字段是否运行为空,默认是 False(必填字段 False,反之则 True) required=False:当前字段允许不传,默认是 True(必填字段 True,反之则 False) 二、反序列化_校验机制调用序列化器对象的 is_valid() 方法,校验前 ...
1.0 版本需求: 1.完成一个端口的扫描 123456789101112131415161718192021222324252627import socketdef scanPort(): # 1.使用 TCP 协议扫描端口 sk = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 2.设置连接时间 sk.settimeout(0.5) scan_ip = input("请输入需要扫描的IP:") scan_port = input("请输入需要扫描的port:") try: # 3.创建连接 conn = sk.connect_ex((scan_ip, int(scan_port))) if conn == 0: print(f'主机:{scan_ip},端口:{scan_port} 已开放。') # 4.关 ...