from multiprocessing import Process import time import random def func(i): print('我是%s'%i) if __name__ == '__main__': l = [] addr = ['河南的','山东的','辽宁的','湖南的'] for i in addr: p = Process(target=func,args=(i,)) p.start() l.append(p) [p.join() for p in l] # time.sleep(1) print('我选%s'%(random.choice(addr)))
多进程的其他常用方法
from multiprocessing import Process import time import os ###########################################开启子进程的一种方式 def func(i): time.sleep(1) print('这里是儿子进程,儿子自己的pid是%s,儿子的父进程的pid是%s'%(os.getpid(),os.getppid())) # os.getpid()获取的是当前进程自己的pid # os.getppid()获取的是当前进程的父进程的pid if __name__ == '__main__': p = Process(target=func,args=(1,))# 实例化一个进程对象 p.start()# 开启一个子进程 print('这里是父亲进程,父进程自己的pid是:%s,父亲的父亲的pid是%s'%(os.getpid(),os.getppid())) ######################################## 开启子进程的另外一种方式,以继承的方式 class MyProcess(Process): def __init__(self): super(MyProcess, self).__init__() def run(self): print('这是以继承类的方式开启的子进程') if __name__ == '__main__': p1 = MyProcess() p1.start()# 是指,解释器告诉操作系统,去帮我开启一个进程, 就绪状态 # p1.run()# 告诉操作系统,现在马上帮我执行这个子进程 执行 class MyProcess(Process): def __init__(self): super(MyProcess, self).__init__()# 执行父类的__init__方法 # self.name = name def run(self): print('这是以继承类的方式开启的子进程,他的名字是%s'%self.name) if __name__ == '__main__': p1 = MyProcess() p1.start()# 是指,解释器告诉操作系统,去帮我开启一个进程, 就绪状态 p1.run()# 告诉操作系统,现在马上帮我执行这个子进程 执行 ################################################如何开启多个不同的子进程 def func(i): time.sleep(1) print('这里是儿子%s进程,儿子自己的pid是%s,儿子的父进程的pid是%s'%(i,os.getpid(),os.getppid())) # os.getpid()获取的是当前进程自己的pid # os.getppid()获取的是当前进程的父进程的pid if __name__ == '__main__': for i in range(2): p = Process(target=func,args=(i,))# 实例化一个进程对象 p.start()# 开启一个子进程 print('这里是父亲进程,父进程自己的pid是:%s,父亲的父亲的pid是%s'%(os.getpid(),os.getppid()))
守护进程
from multiprocessing import Process import time def func(): time.sleep(100) print('这里是儿子哦') if __name__ == '__main__': p = Process(target=func) p.daemon = True # 将p进程设置为守护进程,必须要在start之前设置 p.start() time.sleep(1) print('这是爸爸') 总结一下: 守护进程:跟随着父进程的代码执行结束,守护进程就结束 ###########################################守护进程的特点 from multiprocessing import Process import time def func1(): print('这里是孙子') def func(): p = Process(target=func1) p.start() time.sleep(5) print('这里是儿子哦') if __name__ == '__main__': p = Process(target=func) p.daemon = True # 将p进程设置为守护进程,必须要在start之前设置 p.start() time.sleep(1) print('这是爸爸') 守护进程:不允许开启子进程 ####################################### 守护进程的用法 from multiprocessing import Process import time def func(): for i in range(10): time.sleep(1) print(time.strftime('%H:%M:%S')) if __name__ == '__main__': p = Process(target=func) p.daemon = True # 将p进程设置为守护进程,必须要在start之前设置 p.start() time.sleep(5) print('这是爸爸')
from multiprocessing import Process import time def func(): for i in range(500): time.sleep(0.01) print('儿子在这里') if __name__ == '__main__': p = Process(target=func) p.start() p.join()# 是让主进程等待子进程执行完。 现象:主进程执行到这句话,主进程阻塞住,等待子进程执行 # time.sleep(1) for i in range(100): time.sleep(0.01) print('爸爸在这里') # 开启一个正常的子进程,父进程会等待子进程结束后,父进程也就是程序才结束 # p.join()# 是让主进程等待子进程执行完。 现象:主进程执行到这句话,主进程阻塞住,等待子进程执行 # 如何把父进程和子进程之间的关系变为同步或者异步? # 父进程执行join,就会变成同步,不执行join,父进程和子进程就是异步的关系 # join必须放在start()后边