本文主要讲述python使用 multiprocessing 实现多进程
先定义一个受害者函数
import datetime import multiprocessing import time import os def work(worker='哥哥' , stime=3): print(worker , '开始工作' , str(datetime.datetime.now())[:-7] , '当前进程的编号' , os.getpid() , '父进程的编号' , os.getppid()) time.sleep(stime) print(worker , '结束工作' , str(datetime.datetime.now())[:-7])
普通写法
if __name__ == '__main__': # 1
work('小红')
work('黑粉')
work('哥哥')
结果
# 小红 开始工作 2023-03-31 10:11:36 当前进程的编号 88052 父进程的编号 13320 # 小红 结束工作 2023-03-31 10:11:39 # 黑粉 开始工作 2023-03-31 10:11:39 当前进程的编号 88052 父进程的编号 13320 # 黑粉 结束工作 2023-03-31 10:11:42 # 哥哥 开始工作 2023-03-31 10:11:42 当前进程的编号 88052 父进程的编号 13320 # 哥哥 结束工作 2023-03-31 10:11:45
可以看到函数是依次执行的
多进程写法
if __name__ == '__main__': # 2 xiaohong = multiprocessing.Process(target=work , args=('小红' ,)) heifen = multiprocessing.Process(target=work , kwargs={'worker': '黑粉'}) gege = multiprocessing.Process(target=work) xiaohong.start() heifen.start() gege.start()
time.sleep(1)
print('老板溜了',str(datetime.datetime.now())[:-7] )
输出
# 小红 开始工作 2023-03-31 10:13:54 当前进程的编号 51404 父进程的编号 60648 # 黑粉 开始工作 2023-03-31 10:13:54 当前进程的编号 41040 父进程的编号 60648 # 哥哥 开始工作 2023-03-31 10:13:54 当前进程的编号 113232 父进程的编号 60648 # 老板溜了 2023-03-31 10:13:55 # 小红 结束工作 2023-03-31 10:13:57 # 黑粉 结束工作 2023-03-31 10:13:57 # 哥哥 结束工作 2023-03-31 10:13:57
这个时候三个人就是同时工作的,子进程不一样 ,父进程一样
但是父进程结束后,子进程不受影响 ()
守护进程
设置子进程守护,当主进程结束时,子进程也不再继续执行,直接结束。
进程名称.daemon = True
if __name__ == '__main__': xiaohong = multiprocessing.Process(target=work , args=('小红' , 3)) heifen = multiprocessing.Process(target=work , kwargs={'worker': '黑粉' , 'stime': 3}) gege = multiprocessing.Process(target=work) xiaohong.daemon = True heifen.daemon = True xiaohong.start() heifen.start() gege.start() time.sleep(1) print('老板溜了' , str(datetime.datetime.now())[:-7])
输出
# 小红 开始工作 2023-03-31 10:16:39 当前进程的编号 46800 父进程的编号 111792 # 黑粉 开始工作 2023-03-31 10:16:39 当前进程的编号 49532 父进程的编号 111792 # 哥哥 开始工作 2023-03-31 10:16:39 当前进程的编号 20516 父进程的编号 111792 # 老板溜了 2023-03-31 10:16:40 # 哥哥 结束工作 2023-03-31 10:16:42
因为哥哥不是守护进程 所以父进程结束后 哥哥会继续执行 也只有哥哥会继续执行
join
让父进程等待子进程执行完再执行
if __name__ == '__main__': xiaohong = multiprocessing.Process(target=work , args=('小红' , 3)) heifen = multiprocessing.Process(target=work , kwargs={'worker': '黑粉' , 'stime': 5}) gege = multiprocessing.Process(target=work) xiaohong.daemon = True xiaohong.start() heifen.start() gege.start() gege.join() print('老板溜了' , str(datetime.datetime.now())[:-7])
输出
小红 开始工作 2023-03-31 10:44:39 当前进程的编号 56624 父进程的编号 21948 黑粉 开始工作 2023-03-31 10:44:39 当前进程的编号 20668 父进程的编号 21948 哥哥 开始工作 2023-03-31 10:44:39 当前进程的编号 100428 父进程的编号 21948 哥哥 结束工作 2023-03-31 10:44:41 老板溜了 2023-03-31 10:44:41 黑粉 结束工作 2023-03-31 10:44:44
很明显 老板是等哥哥结束工作才走的 而小红作为守护进程 在父进程结束它也直接结束了
posted on
浙公网安备 33010602011771号