#multiprocess.process模块 #process模块是一个创建进程的模块,借助这个模块,可以完成进程的创建 # Process([group[,target[,name[,args[,kwargs]]]]]) ,由该实例化得到的对象, # 表示一个子进程的任务(尚未启动) #注意(参数介绍): #1.需要使用关键字参数的方式来指定参数 #2.args指定的为传给target函数的位置参数,是一个元组形式,必须有逗号 #3.group参数为使用,值始终未None #4.target表示调用对象,即子进程要执行的任务 #5.args表示调用对象的字典,kwargs={"name_":"json","age":19} #6.name为子进程的名字 #方法介绍: #1.p.start():启动进程,并调用该子进程中的p.run()方法 #2.p.run():进程启动时运行的方法,正是它去调用target指定的函数, # 我们自定义类的类中一定要实现该方法 #3.p.terminate():强制终止进程p,不会进行任何清理操作 #4.p.is_alive():如果仍然运行,返回True #5.p.join(timeout):主进程等待p终止(注意:主进程处于等的状态,而p #是处于运行的状态)timeout是可选的超出时间,需要强调的是p.join只能join #主start开启的进程,而不能join住run开启的进程. #属性介绍: #1.p.daemon:默认值为False,如果设置为True,代表p为后天运行的守护进程 #2.p.pid:进程的pid os.getpid() 当前运行进程的pid #3.p.exitcode:进程在运行时为None,如果为-N,表示被信号N结束 #4.p.authkey:进程的身份验证,默认是由os.urandom()随机生成的32位字符的 #字符串.这个键的用途是为了涉及网络连接的底层间通信提供安全性 #这类连接只有在具有相同的身份验证键时才能成功. #process模块创建进程和查看主进程的pid # from multiprocessing import Process # # import time,os # # def func(name): # print("hello",name) # print("我是子进程,我的pid是%s,父进程的pid是%s" %(os.getpid(),os.getppid())) # # if __name__ == ‘__main__‘: # p = Process(target=func,args=("jack",)) # 元组 # p.start() # 开始进程 # time.sleep(1) # print("执行父进程了,父进程的pid是%s,父亲的父进程(pycharm的)pid是%s" %(os.getpid(),os.getppid())) #结果: # hello jack # 我是子进程,我的pid是4604,父进程的pid是7728 # 执行父进程了,父进程的pid是7728,父亲的父进程(pycharm的)pid是4476 # # 通过继承创建进程 # from multiprocessing import Process # class MyProcess(Process): # def __init__(self): # super(MyProcess, self).__init__() # # def run(self): # print("执行子进程") # # from multiprocessing import Process # import os # class MyPrpcess(Process): # def __init__(self,name): # super(MyPrpcess, self).__init__() # self.name = name # def run(self): # print(os.getpid()) # print("%s正在聊天" %self.name) # if __name__ == ‘__main__‘: # # p1 = MyPrpcess("jack") # p2 = MyPrpcess("tom") # # p1.start() #start会调用run方法 # p2.start() # # p1.join() # p2.join() # # print("主线程") # if __name__ == ‘__main__‘: # p = MyProcess() # # p1.start()# 是指,解释器告诉操作系统,去帮我开启一个进程, 就绪状态 # p1.run()# 告诉操作系统,现在马上帮我执行这个子进程 执行 #结果: 执行子进程 # join()方法: # from multiprocessing import Process # import time # def func(name): # time.sleep(2) # print("hesllo",name) # print("执行子进程") # # if __name__ == ‘__main__‘: # p = Process(target=func,args=("jack",)) # p.start() # p.join() # print("执行主进程") #结果: # hesllo jack # 执行子进程 # 执行主进程 # join()的作用:是让主进程等待进程执行完. # 现象:主进程执行到这句话,主进程阻塞住,等待子进程子进程执行 #开启一个正常的子进程,父进程会等待子进程结束后,父进程也就是程序才结束 # 如何把父进程和子进程之间的关系变为同步或者异步? #父进程执行join,就会变成同步,不执行join,父进程和子进程就是异步关系 #注意: #join 必须放在start()后面 #多进程之间无法共享内存 # from multiprocessing import Process # # def func(i): # print("我是%s"%i) # 调用四次都是相互独立的 # #print(n) # 无法调用n # if __name__ == ‘__main__‘: # n = 100 # addr = ["河南","湖北","山东","北京"] # for i in addr: # p = Process(target=func,args=(i,)) # p.start() #结果: # 我是河南 # 我是湖北 # 我是山东 # 我是北京 # 多个子进程(子进程的执行顺序不是根据启动顺序决定) # from multiprocessing import Process # import random # import time # def func(i): # print("我是%s"%i) # if __name__ == ‘__main__‘: # lst = [] # addr = ["河南","湖北","山东","北京"] # for i in addr: # p = Process(target=func,args=(i,)) # p.start() # lst.append(p) # time.sleep(1) # [p.join() for p in lst] # print("我选%s" %(random.choice(addr))) #结果: # 我是河南 # 我是湖北 # 我是山东 # 我是北京 # 我选北京(随机出现) # 多进程同时运行,join方法1 # from multiprocessing import Process # # def func(name): # print("hello",name) # # if __name__ == ‘__main__‘: # lst = [] # for i in range(5): # p = Process(target=func,args=("alex",)) # p.start() # lst.append(p) # p.join() # print("执行父进程") #结果: # hello alex # hello alex # hello alex # hello alex # hello alex # 执行父进程 #多进程同时运行,join方法2 # from multiprocessing import Process # import time # # def func(name): # print("hello",name) # time.sleep(1) # # if __name__ == ‘__main__‘: # lst = [] # for i in range(5): # p = Process(target=func,args=("jack",)) # p.start() # lst.append(p) # [p.join() for p in lst] # print("父进程执行") #结果: # hello jack # hello jack # hello jack # hello jack # hello jack # 父进程执行
原文地址:https://www.cnblogs.com/caodneg7/p/9508422.html
时间: 2024-10-18 15:56:53