【Python自动化运维之路Day10】网络篇之网络socketserver

课堂笔记:

上周回顾:
socket:
1. 导入模块
2. 创建socket
3. send
sendall, sendall本质上也是调用send
但是在内部做了一个while循环,拿到消息,循环发,知道消息完全发送
sendall:
while True:
10 = send(‘adkflskjf023jlskdf‘)
10 = send(‘adkflskjf023jlskdf‘)
...
send,一次不一定能完全发送
10 = send(‘adkflskjf023jlskdf‘)
所以,以后使用,都应该使用sendall

Python 3中发送 的是 字节, Python2中发送的是 字符串

recv(2048) 最多接受2048
粘包:
ack确认

socketserver:
1. 自定义类
2. 继承方法

一. 上节作业:

二. 小知识点:
作用域
1. Python中没有块级作用域
Java/C# 不可以
Python/JavaScript 可以

if 1 == 1:
name = ‘alex‘
print(name)

for i in range(10):
name = i
print(name)

2. Python中以函数为作用域
3. 作用域链,找的时候,由内往外找,知道找不到报错

对于作用于来说,在函数没有执行之前,作用域已经全部确定了,作用域链也已经确定了。

三. Python2.7多继承, 回顾下Python3.5的多继承
Python3中所有的类都默认继承 object类
Python2.7中所有的类默认都不继承 object类

Python2.7中:
默认不支持 不继承object的类 叫经典类;
添加object的,继承object的类,叫新式类;

Python3中:
所有的都是新式类,也就是默认的都继承object类

四. socketserver源码, 下来找下源码
============== ***** =================
支持并发处理 socket

1. __init__ TCPServer, 调用 BaseServer 的构造方法
2. BaseServer
self.server_address = server_address 传入的元组, ip和端口
self.RequestHandlerClass = RequestHandlerClass 自己定义的类
self.__is_shut_down = threading.Event()
self.__shutdown_request = False
3. server.serve_forever() --》 BaseServer
4. self._handle_request_noblock() serve_forever() 中调用的!
5. self._handle_request_noblock 方法调用: self.process_request(request, client_address)
6. 从self.process_request(request, client_address) 方法调用:
self.finish_request(request, client_address)
self.shutdown_request(request)
7. self.finish_request(request, client_address)
self.RequestHandlerClass(request, client_address, self)
8. shutdown_request(self, request):
self.close_request(request)

五. I/O多路复用
能检测所有的IO操作,不单纯是socket, 但是文件操作除外
概述:
select ,poll , epoll
监听socket对象内部是否变化了?
什么时候变化?
连接或者收发消息的时候
select 系统内核底层维护了一个for循环,检测变化。在windows、linux平台都可以用,支持跨平台。有C10K问题,最大支持1024个
poll, 底层也是通过for循环实现。 但是没有个数限制了。但是for循环效率不高。
epoll,谁变化(回调函数),告诉epoll谁发生了变化。而

六. 多线程、多进程
概述:

Alex 甄嬛西游传
1. 一个应用程序可以有多进程、多线程
2. 默认是单进程、单线程
3. 单进程,多线程,在Python中不会性能提升,在Java和C#中可以提升。
提高并发:
多线程: IO操作,不会用到CPU,效率提升是可以的

多进程:计算型操作, 需要占用CPU,因此性能不会有提升
可以用 多进程
4. GIL,全局解释器锁的存在,导致的

创建线程知识点:
obj.setDaemon(False) #True, 表示主线程不等子线程
obj.join(num) #表示主线程到此等待。。。,直到子线程执行结束; num是指最多等待num秒
obj.start() #不代表当前县城内会被立即执行

博客,待续...

时间: 2024-10-09 12:00:24

【Python自动化运维之路Day10】网络篇之网络socketserver的相关文章

python自动化运维之路~DAY10

python自动化运维之路~DAY10 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.

python自动化运维之路~DAY7

python自动化运维之路~DAY7 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.客户端/服务器架构 C/S 架构是一种典型的两层架构,其全称是Client/Server,即客户端服务器端架构,其客户端包含一个或多个在用户的电脑上运行的程序,而服务器端有两种,一种是数据库服务器端,客户端通过数据库连接访问服务器端的数据:另一种是Socket服务器端,服务器端的程序通过Socket与客户端的程序通信. C/S 架构也可以看做是胖客户端架构.因为客户端需要实现绝大多数的业务

【Python自动化运维之路Day9】Socket

socket也可以认为是套接字是一种源IP地址和目的IP地址以及源端口号和目的端口号的组合.网络化的应用程序在开始任何通讯之前都必须要创建套接字.就像电话的插口一样,没有它就没办法通讯. socket即是一种特殊的文件,一些socket函数就是对其进行的操作(读/写IO.打开.关闭) 我们知道两个进程如果需要进行通讯最基本的一个前提能能够唯一的标示一个进程,在本地进程通讯中我们可以使用PID来唯一标示一个进程,但PID只在本地唯一,网络中的两个进程PID冲突几率很大,这时候我们需要另辟它径了,我

《Python自动化运维之路》 系统基础信息模块(一)

系统性能收集模块Psutil 目录: 系统性能信息模块psutil 系统性能信息模块psutil psutil能够轻松实现获取系统运行的进程和系统利用率包括(CPU,内存,磁盘 和网络)等.主要用于系统监控.对于系统维护来说是个不错的模块. 1.模块的安装 wget https://files.pythonhosted.org/packages/14/a2/8ac7dda36eac03950ec2668ab1b466314403031c83a95c5efc81d2acf163/psutil-5.

【Python自动化运维之路Day7】基础篇

今日目录: 模块 configparser xml shutil zipfile tarfile subprocess 面向对象(上) 一. 模块 上一期博客里列出了几个常用模块(os,hashlib,sys,re), 还有几个剩余的,这篇来继续往下走. 1. configparser模块 configparser模块是Python自带模块,主要用于处理特定的文件(ini文件),格式比较像MySQL的配置文件类型,就是文件中有多个section,每个section下面有多个配置项,如下: [my

python自动化运维之路4

装饰器 装饰器(decorator)是一种高级Python语法.装饰器可以对一个函数.方法或者类进行加工.在Python中,我们有多种方法对函数和类进行加工,比如在Python闭包中,我们见到函数对象作为某一个函数的返回结果.相对于其它方式,装饰器语法简单,代码可读性高.因此,装饰器在Python项目中有广泛的应用. 装饰器的应用场景:饰器是一个很著名的设计模式,经常被用于有切面需求的场景,较为经典的有插入日志.性能测试.事务处理等.装饰器是解决这类问题的绝佳设计,有了装饰器,我们就可以抽离出大

【Python自动化运维之路Day2】

1. 常量命名规则 在Python中,会在变量命名上标明某变量是常量,通常采用全是大写的方式来标明,如: CONNECT= '127.0.0.1' PORT = '3306' 2.Python编译 python先把源码文件(.py)编译成字节码文件(.pyc) python3执行后,生成了一个__pycache__目录,pyc会在此目录下,python2执行可以看到直接生成了一个.pyc文件 pyc  与py  时间戳不同,pyc才去重新编译 3  数据 <1> str 1.str1+str2

python自动化运维之路~DAY1

刚学python,有大神给指点指点的吗? #!/usr/bin/env python#_*_coding:utf8_*_import getpass,syscount = 0match_info = False #用布尔值来标志用户密码是否匹配,默认是flasewhile count < 3: username = input("\033[32;1mAsk you for a username :\033[0m") with open("locked.txt"

《Python自动化运维之路》 业务服务监控(二)

文件内容差异对比方法 目录: 实例:两个字符串的差异对比 生成美观的对比HTML格式文档 对比Nginx配置文件的差异 两个字符串的差异对比 本例通过使用difflib模块实现两个字符串的差异对比,然后以版本控制风格进行输出. >>> import difflib >>> >>> text1="difflib document v7.4" #定义字符串1 >>> text2="difflib docume