1上节回顾
Socket
1、导入模块
2、创建socket
3、2。7发送的是字符串,但是3.5里面全部都是字节
Send:我发送了多少(10字节)=send('sadaqweqweqweqweqwe'),不一定全部发送完毕
Sendall,其实就是调用send,但是做了一个while循环,一直调用send,把所有的消息全部发送完毕
4、recv(2048) 上传文件,最多接收2048个字节
粘包:ack
Subprocess
win:gbk编码的字节
linux:utf-8编码的字节
小知识
作用域
Python 中无块级作用域
java和c#里面下面代码无法执行
python和javascript可以执行
有块级作用域只能在块里面用,无块级可以在块外面用
python以函数为作用域的
if 1==1: name="wzc" print(name) def func(): name1="wzc" func() print(name1)
结果
wzc Traceback (most recent call last): File "/Users/wangzhichao/PycharmProjects/python_study/day10/1-1.py", line 11, in <module> print(name1) NameError: name 'name1' is not defined Process finished with exit code 1
python作用域链,由内向外找,直到找不到报错
对于作用域来说,在函数没有执行之前,作用域已经全部都确定了,作用域链已经全部都确定了
由内向外一层一层
name="www" def f1(): print(name) def f2(): name="wzc" return f1 ret=f2() ret()
结果:
www Process finished with exit code 0
Python27多继承,py3.5多继承
2.7不继承object类,但是python3自动继承object类
2.7:
默认不继承的是经典类
继承的是新式类
3.5
全是新式类
Socket server 源码
支持并发处理socket
IO多路复用
概述
select、poll、epoll
select对个数有限制,1024个函数,内部通过for循环来实现,可以跨平台
poll,没有个数显示,但是还是for循环,无法跨平台
epoll是里面哪一个有变化,就会通知epoll。回调
监听socket对象内部是否变化了?
什么时候变化?连接或收发消息的时候
服务器端的socket对象发生变化==》就是有新连接来了
sk:有新连接来了
conn:要收发消息了
多线程、多进程、协称
alex甄嬛西游传
1、一个应用程序,可以有多进程多线程
2、默认是单进程单线程
3、单进程,多线程
IO操作,不占用CPU
多线程提高并发
IO操作
计算性操作
多进程提高并发
需要占用cpu,无法多线程,就需要利用多进程
4、GIL 全局解释器锁 ,java和C#没有这个锁
如何创建线程
和线程相关的模块,都在threading
需要靠cpu自己的调度,来确认执行的时间
Python2.7 里面,每个线程默认执行100条cpu指令
Python3里面,这个线程执行多长时间,用时间来分片
import time def f1(arg): time.sleep(3) print(arg) import threading t=threading.Thread(target=f1,args=(123,)) t.setDaemon(True) t.start() t.join(2) print("end") print("end") print("end") print("end") print("end") print("end") print("end")
结果:
end end end end end end end Process finished with exit code 0