进程 进程即正在执行的一个过程。进程是对正在运行程序的一个抽象.
开启进程的方法:

import time import os from multiprocessing import Process def func(args,args2): print(args,args2) print('子',os.getpid()) print('子的父',os.getppid()) if __name__=='__main__': p = Process(target=func,args=('参数1','参数2')) #主进程 # p是一个进程对象 还没启动 p.start() #创建一个子进程 和父进程异步进行 print('*'*5) print('父',os.getpid()) print('父的父',os.getppid()) #进程的生命周期 #开启子进程的主进程: #主进程的代码如果长 等待自己的代码执行结束 #子进程始行时间长 主进程执行完毕后 等待子进行执行完毕后 主进程才结束

import os # from multiprocessing import Process # # class Myprocess(Process): # def __init__(self,args,args2): # super().__init__() # self.args = args # self.args2 = args2 # def run(self): # print(self.pid) # # # if __name__=='__main__': # print('主:',os.getpid()) # p1 = Myprocess(1,2) # p1.start() # p2 = Myprocess(2,3) # p2.start()
开启多个子进程:

# import time # from multiprocessing import Process # def func(args,args2): # print('*'*args) # time.sleep(3) # print('*'*args2) # # if __name__=='__main__': # p_list = [] # for i in range(1,10): # p = Process(target=func,args=(1*i,2*i)) # p_list.append(p) # p.start() # [p.join() for p in p_list] # print('执行完了')
多进程中的几种方法:
join()方法 感知一个子进程的结束
p.daemon = True 在start()前插入代码 就是将该子进程设置为守护进程
守护进程在主进程代码读完后结束,此时主进程可能还没有结束 而是在等待别的子进程执行结束才结束
p.is_alive检验一个进程是否还活着

# import time # from multiprocessing import Process # def fun(): # while 1: # print('活着') # time.sleep(0.1) # def fun2(): # print('fun2 start') # time.sleep(10) # print('fub2 end') # # if __name__=='__main__': # p = Process(target=fun) # p.daemon = True # 设置子进程为守护进程 # p.start() # p2 = Process(target=fun2) # p2.start() # print(p2.is_alive()) # is_alive检验一个进程是否活着 # print(p2.name) # # i = 0 # while i<5: # print('socket server') # time.sleep(1) # i += 1
进程锁:
多个进程同时抢一个数据就会出现数据安全问题,此时需要用进程锁限制数据,同一时间只能被一个进程操作
归还数据之后才能被另外的进程操作。此时牺牲效率保证安全

import time import json from multiprocessing import Process from multiprocessing import Lock def show(i): with open('ticket') as f: dic = json.load(f) print('余票:%s'%dic['ticket']) def buy_tk(i,lock): lock.acquire() with open('ticket') as f: dic = json.load(f) time.sleep(0.1) if dic['ticket']>0: dic['ticket'] -= 1 print('