码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2016-07-15 13:30:36      阅读:155      评论:0      收藏:0      [点我收藏+]

标签:

课堂笔记:

上周回顾:
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() #不代表当前县城内会被立即执行

 

 

博客,待续...

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

标签:

原文地址:http://www.cnblogs.com/dubq/p/5672988.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!