- 博客(20)
- 问答 (1)
- 收藏
- 关注
原创 单进程、单线程非堵塞长连接http服务器
本章时前面的综合案例编写。关键点1、设置非堵塞2、参数的传递3、返回头的设置response_header += "Content-Length:%d\r\n" % len(response_body)"""单进程、单线程非堵塞长连接http服务器"""import socketimport redef service_client(client_socket, request): """为客户端返回数据""" # 接收浏览器发送过来的请求 即 http 请求
2021-09-12 06:43:10
160
转载 长连接与短连接
HTTP协议与TCP/IP协议的关系HTTP的长连接和短连接本质上是TCP长连接和短连接。HTTP属于应用层协议,在传输层使用TCP协议,在网络层使用IP协议。 IP协议主要解决网络路由和寻址问题,TCP协议主要解决如何在IP层之上可靠地传递数据包,使得网络上接收端收到发送端所发出的所有包,并且顺序与发送顺序一致。TCP协议是可靠的、面向连接的。如何理解HTTP协议是无状态的HTTP协议是无状态的,指的是协议对于事务处理没有记忆能力,服务器不知道客户端是什么状态。也就是说,打开一个服务器上的网.
2021-09-10 06:13:45
164
原创 单进程、单线程、非堵塞实现并发的验证笔记
这一章节是对上一章节的验证。上一章节讲到了单进程、单线程非堵塞实现并发的原理。主要关键点就是设置非堵塞和定义一个空列表。向列表里面添加客户端。但是这个地方有一个严重的问题,就是客户端添加到列表之后,后面每一次遍历都会将列表里面的客户端全部都遍历一遍,即使这个客户端已经断开连接了,这样会耗费大量资源和精力。那么此时将断开的客户端从列表里面删除掉就是关键点了。此时只需要添加一个判断即可。因为当关闭客户端的时候,客户端发送的数据为空,此时只要判断服务器接收到客户端发送的数据为空的时候,删除掉列表里面的客户端即可
2021-09-07 22:57:23
134
原创 单进程、单线程非堵塞实现并发的原理笔记
以后决定了,每学习一章的内容,就更新一章。这样写出来的笔记就不会那么没有条理了。这一章主要讲的是,单进程、单线程实现并发的原理。主要关键点就是设置套接字非堵塞。因为监听套接字,在调用accept() 连接新的客户端到来的时候就会产生堵塞。而新的套接字new_socket在接收数据 recv() 的时候也会产生堵塞。那么将监听套接字和新的套接字各自设置为非堵塞就会解决这个问题。此时将套接字设置未非堵塞就可以实现。tcp_server_tcp = socket.socket()tcp_server_
2021-09-06 06:09:00
214
原创 HTTP协议笔记
在web应用中,服务器把网页传给浏览器。实际上是把网页的HTML发送给浏览器,让浏览器显示出来而浏览器和服务器之间的传输协议是HTTP 所以HTTP 是一种用来定义网页的文本,会HTML就会编写网页HTTP是网络上传输HTML的协议,用于浏览器和服务器的通信查找ip cmd ipconfingGET / HTTP/1.1Host: 192.168.1.3:1024Connection: keep-alive# 长连接Upgrade-Insecure-Requests: 1User
2021-09-04 19:20:36
84
原创 re—正则表达式笔记
其实,不从事这份工作,学习起来真的是要吃力很多。花有限的时间学习,平时学习的知识得不到实践运用。只能靠这种方式来记录点点滴滴。希望能够有机会参与到实际工作中。能够在实际工作中得到运用。看了很多外包的任务,都是我胜任不了的,涉及到的知识都还是我现在没有接触到的。不知道哪位能够给点建议,能够从基础活开始做起。进入正题吧,正则表达式感觉还是非常重要的。1、导入re模块import re2、使用match方法进行匹配操作3、如果上一步匹配到数据的话,可以使用group()方法来提取数据result = r
2021-09-04 19:04:26
120
原创 gevent—多任务协程(3)
三、greenlet 实现多任务 替换yieldgreenlet 封装yield1、导入 greenlet 模块from greenlet import greenlet2、创建gr1 = greenlet(task1)3、启动gr1.switch()def task1(): while True: print("....1....") gr2.switch() time.sleep(2)def task2(): whil
2021-09-04 17:43:31
137
原创 生成器—多任务协程笔记(2)
二、生成器 和 协程 yield生成器是一种特殊的迭代器1、将列表生成式的[] 换成() 此种方式使用较少nums = [i*2 for i in range(10)]print(nums)nums = (i*2 for i in range(10))for i in nums: print(i)2、定义一个函数,将函数变成生成器 只要函数中有 yield, 那么这个函数就已经不是函数了,而是一个生成器的模板def create_data(all_num): a, b =
2021-09-04 17:39:34
99
原创 迭代器—多任务协程笔记(1)
之前学到了多任务的多线程和多进程。这一节学习的是协程。知识点会稍微多一些,并且学习到的东西后面爬虫都会用到。一、迭代器迭代是访问集合元素的一种方式,迭代器是一个可以记住遍历的位置的对象,迭代器对象从集合的第一个元素开始访问直到所有元素被访问结束。迭代器只能往前不能后退可迭代对象:list、 tuple、 str数据类型不可迭代 int迭代器、 生成器、协程yield、 协程greenlet、 协程gevent迭代器: 迭代是访问集合元素的一种方式,迭代器是一个可以记住遍历位置的对象,迭代器对象
2021-09-04 17:22:12
95
原创 multiprocessing—多任务多进程笔记
上一节里面讲到了什么是多进程,概念问题,直接看上一节多线程就可以。多进程主要用到的是multiprocessing库。主要的代码流程如下1、导入库:import multiprocessing2、创建进程:t1 = multiprocessing.Process(target=test1)t1.start()import multiprocessingimport timedef test1(): print("----1----") time.sleep(1)def t
2021-09-04 17:07:53
246
原创 threading—多任务多线程笔记
这一章节,是之前已经整理好的学习笔记,直接复制记录下来。所以花的时间也比较少。等把所有的笔记都记录之后,再开始新的课程。道路艰难且长远,持之以恒才能攻无不克。开始正题。多任务一共分为三种类型:线程、进程和协程在这里又要补充一个概念,就是并行和并发的概念。并行:同时处理多个任务的能力,指的是任务数小于等于CPU核数,任务真的是一起执行的。并发:交替处理多个任务的能力,指的是任务数多于CPU核数,通过操作系统的各种任务调度算法,实现多个任务“一起”执行,实际上总有一些任务不在执行,因为切换任务的速度相当
2021-09-03 06:06:14
294
原创 socket—TCP网络通信笔记
本章节主要学习的是TCP协议。主要讲什么是TCP以及TCP客户端和服务器的编码方式。一、什么是TCP传输控制协议,是一种面向连接的,可靠的、基于字节流的传输层通信协议。三个步骤:创建连接,数据传送,终止连接udp 不需要创建连接,只需要发送数据。tcp 比udp 稳定tcp 严格区分客户端和服务器二、TCP客户端创建套接字链接服务器输入数据接收数据关闭套接字import socketdef main(): # 1、创建套接字 tcp_socket = socket.
2021-09-02 22:37:39
102
原创 Tkinter—学员管理系统(四)
最后一个功能就是显示的功能了。首先看看界面效果从界面上看还是比较整齐划一的。具体代码如下1、 初始界面def MainTest5(): root4 = tk.Tk() root4.title("显示学员信息") root4.geometry('700x500') ShowName(master=root4) root4.mainloop()2、定义类class ShowName(Frame): def __init__(self, master=
2021-08-07 23:04:42
353
1
原创 Tkinter—学员管理系统(三)
这一章节,就是查看学员信息了。实现的功能是,根据学号、姓或者电话查找出学员的全部信息。界面的排列方式和添加学员的排列方式类似,增加了修改和删除的功能。在查找信息里面输入学号、姓名或者电话号码,在下面的Enter 控件输出相对应的数据。创建初始界面def MainTest4(): root3 = tk.Tk() root3.title("查看学员信息") root3.geometry('500x300') SearchName(master=root3) roo
2021-08-07 22:49:32
472
1
原创 Tkinter-学员管理系统(二)
这章节,主要是学员管理系统的主功能界面的设计以及添加学员信息的功能设计。首先看一下效果。功能比较简单,修改和删除信息的功能在查看信息的功能里面会有所体现。所有功能以及界面设计都是自己凭空研究,遇到很多完全意想不到的问题,有得甚至花费好几天才能够研究明白,具体问题,后面章节详细的叙述。这个界面以及添加学员信息的功能还是比较简单。具体代码见下。1、实现主界面代码class MainSystem(Frame): def __init__(self, master=None): s
2021-08-07 20:38:46
427
原创 tkinter—学员管理系统设计(一)
这个也是我这二十多天的学习成果之一了。由于,这个章节的内容会比较多。所以准备根据不同的功能分次上传。第一章节,主要是针对学员管理系统的登录界面进行设计。效果如下:登录界面比较简单,主界面标题、用户名和密码 使用Label控件 确认和退出使用Button 控件。最后两个Enter控件用于接收用户名和密码。代码如下:1、导入使用的模块from tkinter import *from tkinter import ttkfrom tkinter import messageboximport t
2021-08-07 14:29:23
685
原创 tkinter 界面设计 — 画板
标题 tkinter 界面设计 — 画板上一次写文章还是7.18号了,到现在快20天没有更新了。也不是因为懒,我学习python的时间并不是很多。只有每天早上或者晚上下班回家才有时间。从上次更新到今天。这20天的时间里,学习了新的内容。就是 tkinter 界面设计。这里对 tkinter 就不过多介绍。先记录一下我学习的第一个软件 —— 画板首先看一下界面效果。代码实现导入需要的模块from tkinter import *import tkinter as tkfrom tkinter
2021-08-07 13:49:58
1379
3
原创 学员管理系统—完整版
自学python有了一段时间,能够坚持住,重要的还是因为兴趣使然。遇到问题,通过自己的努力,最后成功解决问题,这种成就感,令我很受用。这是第一个用python写的小规模的程序,开始很多不了解的地方,现在也能够慢慢的自己一整套的写出来。为了增加学习的乐趣,决定把写出来的程序发出来,供前辈的指点,以及和新学者一起探讨。第一步:分析需求第二步:编写显示界面def xianshi_1(): welcome = "欢迎使用学员管理系统" bz1 = "1、添加学员信息" bz2 = "
2021-07-18 21:53:45
783
2
原创 python学员管理—初学
零零散散学了一段时间python,记录一下“”"需求:添加学员信息删除学员修改学员信息查询学员信息:姓名、电话和QQ显示所有学员信息退出系统“”"显示 欢迎使用学员管理系统初始界面def xianshi_1():welcome = “欢迎使用学员管理系统”bz1 = “1、添加学员信息”bz2 = “2、查看学员信息”bz3 = “3、显示所有学员信息”bz4 = “4、退出系统”banben = “v 1.0 版本”print(’-’*50)print(welcome
2021-07-18 21:22:18
70
空空如也
monkey.patch_all()出错问题
2021-09-05
TA创建的收藏夹 TA关注的收藏夹
TA关注的人