复习一下tcp的socket
1 import socket 2 ###server 3 sk = socket.socket() 4 sk.bind(('127.0.0.1',8000)) 5 sk.listen() #最大连接数 6 7 conn,addr = sk.accept() #没执行一次 获取一个连接 8 while True: 9 conn.send(b'hellle') 10 msg = conn.recv(1024) 11 print(msg) 12 conn.close() 13 sk.close() 14 ####client 15 import socket 16 sk = socket.socket() 17 sk.connect(('127.0.0.1',8000)) 18 while True: 19 msg = sk.recv(1024) 20 print(msg) 21 sk.send(b'helllo') 22 sk.close() 23 import socketserver 24 #在socket基础上实现的并发 25 class Myserver(socketserver.BaseRequestHandler): 26 def handle(self): 27 conn = self.request 28 # 并发socket这conn不需要添加其他 最好是根据cilent端做回应或者做判断。 29 myserver = socketserver.ThreadingTCPServer(('127.0.0.1',8000),Myserver) 30 myserver.serve_forever() 31 #socketserver所启动的服务端是不能有input操作 32 #server端一般都是根据cilent端的要求去执行固定的代码
并发编程:一个程序可以同时时刻做多件事情,可以解决程序中的IO操作影响程序效率的问题
#计算机 - - 穿孔纸带
#输入输出 -----大部分时间都不会占用cpu 且会降低程序的效率
#时间消耗:发送请求,从网络上获取数据 占用大部分时间 怎么才可以充分利用这一段时间。
#操作系统发展史:
# 联机批处理系统 :作业的输入/输出由CPU来处理
# 脱机批处理系统 :为克服与缓解:高速主机与慢速外设的矛盾,提高CPU的利用率,又引入了脱机批处理系统,即输入/输出脱离
# 主机控制
# 多道程序系统 :指允许多个程序同时进入内存并运行,同时把多个程序放入内存,并允许它们交替在CPU中运行,它们共享系统
#中的各种硬、软件资源。当一道程序因I/O请求而暂停运行时,CPU便立即转去运行另一道程序
#多道的前提就是能够记住a程序执行到哪个地方,操作系统负责调度作业
# 多道批处理系统 :多道 成批
# 分时系统 :把时间做成切片,每个程序运行一段时间
#实时系统 :系统能够及时响应随机发生的外部事件,并在严格的时间范围内完成对该事件的处理
# 实时系统可分成两类:
# (1)实时控制系统。当用于飞机飞行、导弹发射等的自动控制时,要求计算机能尽快处理测量系统测得的数据,及时
# 地对飞机或导弹进行控制,或将有关信息通过显示终端提供给决策人员。当用于轧钢、石化等工业生产过程控制时,也要求计
# 算机能及时处理由各类传感器送来的数据,然后控制相应的执行机构。
# (2)实时信息处理系统。当用于预定飞机票、查询有关航班、航线、票价等事宜时,或当用于银行系统、情报检索系统
# 时,都要求计算机能对终端设备发来的服务请求及时予以正确的回答。此类对响应及时性的要求稍弱于第一类。
# 实时操作系统的主要特点:
# (1)及时响应。每一个信息接收、分析处理和发送的过程必须在严格的时间限制内完成。
# (2)高可靠性。需采取冗余措施,双机系统前后台工作,也包括必要的保密措施等。
# 分时——现在流行的PC,服务器都是采用这种运行模式,即把CPU的运行分成若干时间片分别处理不同、的运算请求 linux系统
# 实时——一般用于单片机上、PLC等,比如电梯的上下控制中,对于按键等动作要求进行实时处理
#通用操作系统:
# 操作系统的三种基本类型:多道批处理系统、分时系统、实时系统。
# 通用操作系统:具有多种类型操作特征的操作系统。可以同时兼有多道批处理、分时、实时处理的功能,或其中两种以上的功能。
# 例如:实时处理+批处理=实时批处理系统。首先保证优先处理实时任务,插空进行批处理作业。常把实时任务称为前台作业,
# 批作业称为后台作业。
# 再如:分时处理+批处理=分时批处理系统。即:时间要求不强的作业放入“后台”(批处理)处理,需频繁交互的作业在“前
# 台”(分时)处理,处理机优先运行“前台”作业。
# 从上世纪60年代中期,国际上开始研制一些大型的通用操作系统。这些系统试图达到功能齐全、可适应各种应用范围和操作方
# 式变化多端的环境的目标。但是,这些系统过于复杂和庞大,不仅付出了巨大的代价,且在解决其可靠性、可维护性和可理解性方面都
# 遇到很大的困难。
# 相比之下,UNIX操作系统却是一个例外。这是一个通用的多用户分时交互型的操作系统。它首先建立的是一个精干的核心,而
# 其功能却足以与许多大型的操作系统相媲美,在核心层以外,可以支持庞大的软件系统。它很快得到应用和推广,并不断完善,对现代
# 操作系统有着重大的影响。
# 至此,操作系统的基本概念、功能、基本结构和组成都已形成并渐趋完善。
#现代操作系统
#基于多道批处理系统和分时系统
#多个程序,作业在遇到IO操作的时候,操作系统会帮助你进行切换
#让CPU的利用率得到最大的提高
############################进程################################
#进程 :运行中的程序 操作系统中资源分配的最小单位
#什么是程序
#操作系统 只负责管理调度进程
#每一个运行中的程序都需要有自己的内存,资源
#都分配给进程 记录执行的状态 管理自己的内存资源
#pythoon每一个运行中的程序都是一个进程
#一个进程 就能做一件事
#如果有多个进程 -----就可以完成多件事
#启动多个进程就可以实现并发
#如果用python来开启一个进程
1 import time 2 import os 3 from multiprocessing import Process 4 def func(num): 5 print(num,os.getpid()) 6 time.sleep(100) 7 if __name__ == '__main__': 8 print(os.getpid()) 9 p = Process(target=func,args=(10,)) #创造一个进程 10 p.start() #开启一个进程 11 print(os.getpid())
#同步:先做什么后做什么
#异步:一边做什么另一边做其他的
#异步可以有效的提高程序的效率
#进程与进程之间都是异步的
#开启一个进程是有时间开销的
#子进程 :
#主进程 :运行的程序
#父进程 :
#关于print的顺序
#什么是进程 : 运行中的程序 最小的资源分配单位
#python中可以用代码启动一个进程 ---- 子进程
#程序执行就会产生一个主进程
#父子进程之间的数据不可以共享
#父子进程之间的代码执行时异步的,各自执行各自的。
#进程什么时候结束
#主进程什么时候结束,主进程会等待子进程结束之后而结束
1 n = 100 2 def func(): 3 global n 4 n = 0 5 print('-----------') 6 time.sleep(10) 7 # func() 8 if __name__ == '__main__': 9 Process(target=func).start() 10 time.sleep(1) 11 print(n)
1 #开启多个子进程 多进程 2 def fun(n): 3 time.sleep(1) 4 print('-'*n) 5 if __name__ == '__main__': 6 l = [] 7 for i in range(10): 8 p = Process(target=fun, args=(i,)) 9 p.start() 10 l.append(p) 11 for i in l:i.join() 12 print('十条信息都发送完了') 13 Process(target=fun,args=(1,)).start() 14 Process(target=fun,args=(2,)).start() 15 Process(target=fun,args=(3,)).start() 16 Process(target=fun,args=(4,)).start() 17 Process(target=fun,args=(5,)).start() 18 def fun(n): 19 time.sleep(1) 20 print('-'*n) 21 if __name__ == '__main__': 22 # for i in range(10): 23 p = Process(target=fun, args=(1,)) 24 p.start() 25 print('子进程开始了。') 26 p.join() #阻塞会等待子进程执行完毕之后再继续 27 print('十条信息都发送完了')
守护进程:守护进程也是一个子进程,当主进程的代码执行完毕之后自动结束的进程叫做守护进程
1 def deamon_func(): 2 while True: 3 print('我还活着') 4 time.sleep(0.5) 5 def wahaha(): 6 for i in range(10): 7 time.sleep(1) 8 print('---'*i) 9 if __name__ == '__main__': 10 p1 = Process(target=wahaha) 11 p1.start() 12 p = Process(target=deamon_func) 13 p.daemon = True 14 p.start() 15 for i in range(3): 16 print(i*'*') 17 time.sleep(1) 18 p1.join()
#开启一个子进程 start
#子进程和主进程是异步的
#如果在主进程中药等待子进程结束之后在执行某段代码:join
#如果有多个子进程 不能再start一个进程之后就立刻join,把所有的start放到一个列表里,等待所有的进程都start之后再逐一join
#守护进程:当主进程的“代码”执行完毕之后自动结束的进程叫做守护进程
1 ################################lock################################### 2 # 多进程抢占输出资源 3 import os 4 import time 5 import random 6 from multiprocessing import Process,Lock 7 def work(n,lock): 8 lock.acquire() 9 print('%s:%s is running' %(n,os.getpid())) 10 time.sleep(random.random()) 11 print('%s:%s is done' %(n,os.getpid())) 12 lock.release() 13 if __name__ == '__main__': 14 lock = Lock() 15 for i in range(3): 16 p = Process(target=work,args=(i,lock)) 17 p.start() 18 #牺牲效率但是保证了数据的安全
1 ################################3购票系统###################################### 2 #文件db的内容为:{"count":1} 3 #注意一定要用双引号,不然json无法识别 4 #并发运行,效率高,但竞争写同一文件,数据写入错乱 5 from multiprocessing import Process,Lock 6 import time,json,random 7 def search(): 8 dic=json.load(open('db')) 9 print('