python网络自动化运维_【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() #不代表当前县城内会被立即执行

博客,待续...

标签:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值