从零开始的多进程生活之番外篇 - Python

深渊向深渊呼唤

主力大军:从零开始的多进程生活 - 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~

栏目