主力大军:从零开始的多进程生活 - Python
其实本来昨天就应该完结了来的,但是还有很多细节没有跟大家搞清楚,所以就可以趁机再水一篇文章啦~
这一次呢,就不用目录啦,那是大佬用的,咱就好好写作文吧。
昨天咱们写的其实还是有点问题的,有什么问题呢?
我们执行这个py文件的时候,是创建了一个主进程,这个py文件里又创建了两个进程,这两个进程就是py文件这个主进程的子进程。
有点绕,多读几遍。
但是我们运行的时候,主进程想要结束,就必须是在子进程全部结束的情况下才可以。
这样是不可以的!
举个例子来说,我们聊QQ的时候,QQ就是一个主程序,那些聊天的窗口就是她的子程序,当我们关闭QQ这个主程序的时候,那些子程序,也就是聊天窗口会跟着一起关闭。
这就是我们想要的效果,而不是主程序要等待子程序全部关掉才会关掉!
那么该怎么办呢???
守护主进程!
再举个例子来说明:
如果我们像上次那样开进程的话,每一个进程就像是下了班还依然在公司工作的员工一样,但是已经下班了,不能让他们继续再工作了!
所以,我们就要做到只要一下班,大家立马停下工作!
也就是让子进程去守护主进程,只要主进程GG(挂了)了,子进程也跟着归西。
那么,该怎么做呢!
这里我们先设置两个工作特别勤奋的员工:
from time import sleep
# 员工A,工作10次,也就是10×0.3,一共要耗时3秒
def funcA():
for i in range(10):
print('我为工作狂!')
sleep(0.3)
# 员工B,工作10次,也就是20×0.3,一共要耗时6秒
def funcB():
for i in range(20):
print('谁也不能阻止我工作!')
sleep(0.3)
然后,我们再来设置一个工作两秒就下班的公司!
if __name__ == '__main__':
# 休眠两秒,也就是工作两秒
sleep(2)
print('下班了下班了,大家快走鸭!')
接着,我们再把这两个员工的进程,放到下班的前面!
if __name__ == '__main__':
# 创建两个很勤奋员工的进程
process_A = multiprocessing.Process(target=funcA)
process_B = multiprocessing.Process(target=funcB)
# 让他们开始工作
process_A.start()
process_B.start()
# 2秒后下班
sleep(2)
print('下班了下班了,大家快走鸭!')
然后去运行,看一看效果:
可以看到,哪怕是下班了,这两位还在努力的工作!
泪目!!!
所以各位还有什么理由不加班???
咳咳,那怎么守护主进程呢?也就是公司一下班,这俩就滚蛋呢?
很简单!
在启动进程的前面加上一句话就好了:
# 守护主进程
process_A.daemon = True
process_B.daemon = True
也许你要问了,这不是两句话嘛?带上注释就是三句话鸭!
有多少个进程,就有多少句话呗~
整体代码如下:
# 导入进程模块
import multiprocessing
# 导入time里面的sleep,方便看到效果
from time import sleep
def funcA():
for i in range(10):
print('我为工作狂!')
sleep(0.3)
def funcB():
for i in range(20):
print('谁也不能阻止我工作!')
sleep(0.3)
# 不带这个,会报错
if __name__ == '__main__':
# 创建进程对象
process_A = multiprocessing.Process(target=funcA)
process_B = multiprocessing.Process(target=funcB)
# 守护主进程
process_A.daemon = True
process_B.daemon = True
# 启动进程并执行任务
process_A.start()
process_B.start()
sleep(2)
print('下班了下班了,大家快走鸭!')
那就…点赞?收藏?关注?
拜托辣!!!
各位886~