1. socket
1.创建模块
2.创建socket
3.send sendall
send ret = send(bytes('jkdfskjdjsf',encoding = 'utf8')) ret 为发送了多少字节
sendall 会循环send 直到发送完所有数据
recv(2048) 2048一次最大可以接受多大字节的数据
2. socketserver
1.自定义类
2.自定义的类继承socketserver
3.重新定义handle函数
4.调用自定义类
5.运行
3. 上节作业
1. socket 发送字符串
2. socket 发送文件
客户端:
发送文件大小
发送可以发送消息
服务端:
接受消息(文件大小)
小知识
作用域
python 作用域链,由内向外找,直到找不到报错
python中无块级作用域
java/c# 不可输出
python/javascript 可以输出
if 1==1:
name = 'wyx'
print(name) #name 可以输出
#python中以函数作为作用域
def func():
name = 'wyx'
print(name) 无法输出
#python作用域在执行函数之前已经确定完 输出 wyx
1. #name = 'wyx'
# def f1():
# print(name)
#
# def f2():
# name = 'eric'
# return f1
# ret = f2()
# ret()
#第二个等于第三个
2. # li = [lambda :x for x in range(10)]
# r = li[0]()
# print(r)
3. li = []
for x in range(10):
def list0():
return x
li.append(list0)
r = list0()
print(r)
print(li[0]())
IO多路复用
概述
select,poll,epoll
监听socket对象内部是否变化了
是么时候发生变化 链接或者收发消息
服务器端的对象发生变化 -->表示有新链接
sk对象变化: 有新的链接
conn变化: 要收发消息了
多线程,多进程
1. 一个应用程序,可以有多进程,多线程
2. 默认是单进程 单线程
3.单进程,多线程
单进程,多线程使用方式:
IO操作,不占用CPU
多进程:计算性操作,
4.GIL,全局解释器锁
---> 多线程 多进程 提高并发
IO密集型:多线程
计算密集型:多进程