09 2020 档案
摘要:Python基础编程 Author : AI菌 【内容讲解】 一、需求 获取终端命令行参数,获取端口号,然后在web服务器程序动态绑定端口号 二、实现步骤: 1、获取执行python程序的终端命令行参数 2、判断参数的类型,设置端口号必须是整型 3、给Web服务器类的初始化方法添加一个端口号参数,用
阅读全文
摘要:Python基础编程 Author : AI菌 【内容讲解】 获取在终端使用命令行启动程序时使用的参数: 1、调用sys模块: sys.argv 2、sys.argv 返回的是一个列表,返回在终端使用命令行启动程序时使用的参数 3、示例 在终端输入命令: python .\07.获取在终端使用命令行
阅读全文
摘要:Python基础编程 Author : AI菌 【内容讲解】 以面向对象的方式开发静态Web服务器实现步骤: 1、把提供服务的Web服务器抽象成一个类(HTTPWebServer) 2、提供Web服务器的初始化方法__init__,在初始化方法里面创建socket对象 3、提供一个开启Web服务器的
阅读全文
摘要:Python基础编程 Author : AI菌 【内容讲解】 一、需求 1、单任务版的Web服务器,不能支持多用户同时访问,只能一个一个的处理客户端的请求。 例如使用网络调试助手,建立连接后,不发送数据,主线程就会阻塞,其他用户就无法建立连接, 需要等网络调试助手的请求处理完毕,服务端才能继续处理后
阅读全文
摘要:Python基础编程 Author : AI菌 【内容讲解】 一、需求 根据用户的请求返回指定页面的数据,如果请求的资源没有, 返回404页面 二、实现步骤 1、获取用户请求资源的路径 2、根据请求资源的路径,读取指定文件的数据 3、组装指定文件数据的响应报文,发送给浏览器 4、判断请求的文件在服务
阅读全文
摘要:Python基础编程 Author : AI菌 【内容讲解】 一、需求 根据用户的请求返回指定页面的数据 二、实现步骤 1、获取用户请求资源的路径 2、根据请求资源的路径,读取指定文件的数据 3、组装指定文件数据的响应报文,发送给浏览器 4、判断请求的文件在服务端不存在,组装404状态的响应报文,发
阅读全文
摘要:Python基础编程 Author : AI菌 【内容讲解】 开发自己的静态Web服务器步骤: 1、编写一个TCP服务端程序; 2、获取浏览器发送的http请求报文数据; 3、读取固定页面数据,把页面数据组装成HTTP响应报文数据发送给浏览器; 4、HTTP响应报文数据发送完成以后,关闭服务于客户端
阅读全文
摘要:Python基础编程 Author : AI菌 【内容讲解】 一、静态Web服务器是什么? 可以为发出请求的浏览器提供静态文档的程序。 二、如何搭建Python自带的静态Web服务器? 1、搭建Python自带的Web服务器使用 python3 –m http.server 端口号 这个命令即可,端
阅读全文
摘要:Python基础编程 Author : AI菌 【内容讲解】 一、HTTP响应报文组成 一个HTTP响应报文是由响应行、响应头、空行和响应体4个部分组成。 二、响应报文说明 响应行/状态行 HTTP/1.1 200 OK # HTTP协议版本 状态码 状态描述 响应头 Server: Tengine
阅读全文
摘要:Python基础编程 Author : AI菌 【内容讲解】 一、HTTP最常见的请求报文有两种: 1、GET方式的请求报文 2、POST方式的请求报文 二、请求报文的组成 1、GET方式的请求报文: 请求行 + 请求头 + 空行 说明:GET方式的请求报文没有请求体,只有请求行、请求头、空行组成。
阅读全文
摘要:Python基础编程 Author : AI菌 【内容讲解】 一、调出开发者工具 在网页右击,选择检查,调出开发者工具 二、开发者者工具的标签选项说明 元素(Elements):用于查看或修改HTML标签 控制台(Console):执行js代码 源代码(Sources):查看静态资源文件,断点调试J
阅读全文
摘要:Python基础编程 Author : AI菌 【内容讲解】 一、URL定义 URL(Uniform Resoure Locator),即统一资源定位符,就是网址。通过URL能够找到网络中对应的资源数据。 二、URL组成 1、URL示例 https://www.baidu.com/1/34/10/E
阅读全文
摘要:Python基础编程 Author : AI菌 【内容讲解】 一、HTTP协议的介绍 1、HTTP协议(HyperText Transfer Protocol),即超文本传输协议 2、超文本是超级文本的缩写,是指超越文本限制或者超链接,比如:图片、音乐、视频、超链接等等都属于超文本。 3、HTTP协
阅读全文
摘要:Python基础编程 Author : AI菌 【内容讲解】 send和recv原理剖析: 不管是recv还是send都不是直接接收到对方的数据和发送数据到对方, 发送数据会写入到发送缓冲区, 接收数据是从接收缓冲区来读取, 发送数据和接收数据最终是由操作系统控制网卡来完成。 【往期精彩】 ▷【Py
阅读全文
摘要:Python基础编程 Author : AI菌 【内容讲解】 一、解释: 能够同时服务于多个客户端的TCP服务端程序 二、具体实现步骤 1、编写一个TCP服务端程序,循环等待接受客户端的连接请求 2、当客户端和服务端建立连接成功,创建子线程,使用子线程专门处理客户端的请求,防止主线程阻塞 3、把创建
阅读全文
摘要:Python基础编程 Author : AI菌 【内容讲解】 1、当TCP客户端程序想要和TCP服务端程序进行通信的时候必须要先建立连接 2、TCP客户端程序一般不需要绑定端口号,因为客户端是主动发起建立连接的 3、TCP服务端程序必须绑定端口号,否则客户端找不到这个TCP服务端程序。 TCP服务端
阅读全文
摘要:Python基础编程 Author : AI菌 【内容讲解】 一、TCP服务端程序开发步骤 1、导入socket模块 2、创建TCP套接字‘socket’ 参数1: ‘AF_INET’, 表示IPv4地址类型 参数2: ‘SOCK_STREAM’, 表示TCP传输协议类型 3、设置端口复用 # 参数
阅读全文
摘要:Python基础编程 Author : AI菌 【内容讲解】 一、TCP客户端程序开发流程: 1、导入socket模块 2、创建TCP套接字‘socket’ 参数1: ‘AF_INET’, 表示IPv4地址类型 参数2: ‘SOCK_STREAM’, 表示TCP传输协议类型 3、发送数据‘send’
阅读全文
摘要:Python基础编程 Author : AI菌 【内容讲解】 一、TCP网络应用程序开发分为: TCP客户端程序开发:运行在用户设备上的程序, 主动发起建立连接请求的是客户端程序 TCP服务端程序开发:运行在服务器设备上的程序,专门为客户端提供数据服务, 等待接受连接请求的是服务端程序 二、TCP客
阅读全文
摘要:Python基础编程 Author : AI菌 【内容讲解】 socket: 简称套接字,负责进程之间的网络数据传输,好比数据的搬运工。 【往期精彩】 ▷【Python基础编程196 ● 读取文件的4种方式】▷【Python基础编程197 ● 读取文件的4种方式】▷【Python基础编程198 ●
阅读全文
摘要:Python基础编程 Author : AI菌 【内容讲解】 1、网络应用程序之间的通信流程 之前我们介绍了IP地址和端口号, 通过IP地址能够找到对应的设备, 然后再通过端口号找到对应的端口, 再通过端口把数据传输给应用程序。 这里要注意,数据不能随便发送, 在发送之前还需要选择一个对应的传输协议
阅读全文
摘要:Python基础编程 Author : AI菌 【内容讲解】 1、软件程序之间进行数据通信的流程: 首先,通过ip地址找到对应的设备, 然后,通过端口号找到对应的端口, 最后,通过端口把数据传输给应用程序。2、什么是端口? 端口是传输数据的通道,好比教室的门,是数据传输必经之路3、什么端口号? 操作
阅读全文
摘要:Python基础编程 Author : AI菌 【内容讲解】 1、IP地址的概念: IP地址是标识网络中设备的一个地址,好比现实生活中的家庭地址 2、IP地址的表现形式分为: IPv4 和 IPv6 IPv4是目前使用的ip地址,是由点分十进制组成,如192.168.2.1 IPv6是未来使用的ip
阅读全文
摘要:Python基础编程 Author : AI菌 【内容讲解】 1.死锁的概念: 一直等待对方释放锁的情景就是死锁。 2.死锁的危害:死锁一旦产生就会造成应用程序的停止响应,应用程序无法再继续往下执行了。 3.解决死锁的方法:使用互斥锁的时候需要注意死锁的问题,要在合适的地方注意释放锁。 【代码演示】
阅读全文
摘要:Python基础编程 Author : AI菌 【内容讲解】 一、互斥锁的概念: 互斥锁就是保证同一时刻只能有一个线程去操作共享数据,保证共享数据不会出现错误问题; 二、互斥锁的好处: 确保某段关键代码只能由一个线程从头到尾完整地去执行, 保证多个线程访问共享数据不会出现数据错误问题。 三、互斥锁的
阅读全文
摘要:Python基础编程 Author : AI菌 【内容讲解】 一、线程之间共享全局变量数据出现错误问题的解决办法:线程同步 二、线程同步的理解: 线程同步: 就是保证同一时刻只能有一个线程去操作全局变量; 同步: 就是协同步调,按预定的先后次序进行运行; 注意:同步不是一起执行的意思,需要与日常生活
阅读全文
摘要:Python基础编程 Author : AI菌 【内容讲解】 int类型全局变量, 每次值改变,内存地址也会改变,使用时需要globa关键字申明 lsit类型全局变量, 每次值改变,内存地址不会改变,不需要globa关键字申明 【代码演示】 """ int类型全局变量, 每次值改变,内存地址也会改变
阅读全文
摘要:Python基础编程 Author : AI菌 【内容讲解】 线程之间共享全局变量数据出现错误问题 【代码演示】 """ 线程之间共享全局变量数据出现错误问题 """ # 定义两个函数,实现循环100万次,每循环一次给全局变量加1 # 创建两个子线程执行对应的两个函数,查看计算后的结果 # 如果计算
阅读全文
摘要:Python基础编程 Author : AI菌 【内容讲解】 线程之间共享全局变量 【代码演示】 """ 线程之间共享全局变量 """ # 定义一个列表类型的全局变量 # 创建两个子线程分别执行向全局变量添加数据的任务和向全局变量读取数据的任务 # 查看线程之间是否共享全局变量数据 import t
阅读全文
摘要:Python基础编程 Author : AI菌 【内容讲解】 一、问题提出:假如我们就让主线程执行1秒钟,子线程就销毁不再执行,那怎么办呢? 我们可以设置守护主线程,守护主线程就是主线程退出子线程销毁不再执行。 二、设置守护主线程有两种方式: 1、threading.Thread(target=sh
阅读全文
摘要:Python基础编程 Author : AI菌 【内容讲解】 一、问题提出:假如我们就让主线程执行1秒钟,子线程就销毁不再执行,那怎么办呢? 我们可以设置守护主线程,守护主线程就是主线程退出子线程销毁不再执行。 二、设置守护主线程有两种方式: 1、threading.Thread(target=sh
阅读全文
摘要:Python基础编程 Author : AI菌 【内容讲解】 主线程会等待所有的子线程执行结束再结束 【代码演示】 """ 主线程会等待所有的子线程执行结束再结束 """ # 创建一个子线程,这个子线程执行完大概需要2.5秒钟,现在让主线程执行1秒钟就退出程序 # 如果主线程没有成功推出,子线程还在
阅读全文
摘要:Python基础编程 Author : AI菌 【内容讲解】 1、线程之间执行是无序的 它是由cpu调度决定的,cpu调度哪个线程,哪个线程就先执行,没有调度的线程不能执行。 2、进程之间执行也是无序的 它是由操作系统调度决定的,操作系统调度哪个进程,哪个进程就先执行,没有调度的进程不能执行。 【代
阅读全文
摘要:Python基础编程 Author : AI菌 【内容讲解】 线程执行任务并传参有两种方式: 元组方式传参(args) :元组方式传参一定要和参数的顺序保持一致; 字典方式传参(kwargs):字典方式传参字典中的key一定要和参数名保持一致。 【代码演示】 """ 线程执行任务并传参有两种方式:
阅读全文
摘要:Python基础编程 Author : AI菌 【内容讲解】 一、线程的概念: 线程是进程中执行代码的一个分支,每个执行分支(线程)要想工作执行代码需要cpu进行调度 也就是说线程是cpu调度的基本单位,每个进程至少都有一个线程,而这个线程就是我们通常说的主线程。 二、线程注意点: 线程是Pytho
阅读全文
摘要:Python基础编程 Author : AI菌 【内容讲解】 1、主进程会等所有的子进程执行完成以后在退出 为了保证子进程能够正常的运行,主进程会等所有的子进程执行完成以后再销毁 2、子进程还有没执行结束,怎么结束主进程? 方法一: 提前销毁子进程方式:子进程对象.terminate() 方法二:
阅读全文
摘要:Python基础编程 Author : AI菌 【内容讲解】 1、主进程会等所有的子进程执行完成以后在退出 为了保证子进程能够正常的运行,主进程会等所有的子进程执行完成以后再销毁 2、子进程还有没执行结束,怎么结束主进程? 方法一: 提前销毁子进程方式:子进程对象.terminate() 方法二:
阅读全文
摘要:Python基础编程 Author : AI菌 【内容讲解】 进程之间不共享全局变量: 创建子进程会对主进程资源进行拷贝,也就是说子进程是主进程的一个副本,好比是一对双胞胎。 之所以进程之间不共享全局变量,是因为操作的不是同一个进程里面的全局变量, 只不过不同进程里面的全局变量名字相同而已。 【代码
阅读全文
摘要:Python基础编程 Author : AI菌 【内容讲解】 进程执行任务并传参有两种方式: 1、元组方式传参(args): 元组方式传参一定要和参数的顺序保持一致; 元组如果只有一个元素,那么元素后面的逗号不能省略。 2、字典方式传参(kwargs): 字典方式传参字典中的key一定要和参数名保持
阅读全文
摘要:Python基础编程 Author : AI菌 【内容讲解】 一、获取进程编号的目的 获取进程编号可以查看父子进程的关系, 可以得知子进程是由那个主进程创建出来的。 二、获取进程编号的方式 1、获取当前进程编号 os.getpid() 2、获取当前父进程编号 os.getppid() 【代码演示】
阅读全文
摘要:Python基础编程 Author : AI菌 【内容讲解】 一、概念介绍 1、并行:对于多核cpu处理多任务,操作系统会给cpu的每个内核安排一个执行的软件, 多个内核是真正的一起执行软件; 多核cpu是并行的执行多任务,始终有多个软件一起执行; 一句话总结: 并行可以同时执行。 2、并发:单核c
阅读全文