萧云建设网站,蚌埠网站建设专业公司哪家好,徐州网站建设方案开发,品牌展示型网站源码文章目录 进程的注意点1. 进程的注意点介绍2. 进程之间不共享全局变量3. 进程之间不共享全局变量的小结4. 主进程会等待所有的子进程执行结束再结束5. 主进程会等待所有的子进程执行结束再结束的小结 进程的注意点
学习目标
能够说出进程的注意点 1. 进程的注意点介绍
进程之… 文章目录 进程的注意点1. 进程的注意点介绍2. 进程之间不共享全局变量3. 进程之间不共享全局变量的小结4. 主进程会等待所有的子进程执行结束再结束5. 主进程会等待所有的子进程执行结束再结束的小结 进程的注意点
学习目标
能够说出进程的注意点 1. 进程的注意点介绍
进程之间不共享全局变量主进程会等待所有的子进程执行结束再结束
2. 进程之间不共享全局变量
import multiprocessing
import time# 定义全局变量
g_list list()# 添加数据的任务
def add_data():for i in range(5):g_list.append(i)print(add:, i)time.sleep(0.2)# 代码执行到此说明数据添加完成print(add_data:, g_list)def read_data():print(read_data, g_list)if __name__ __main__:# 创建添加数据的子进程add_data_process multiprocessing.Process(targetadd_data)# 创建读取数据的子进程read_data_process multiprocessing.Process(targetread_data)# 启动子进程执行对应的任务add_data_process.start()# 主进程等待添加数据的子进程执行完成以后程序再继续往下执行读取数据add_data_process.join()read_data_process.start()print(main:, g_list)# 总结: 多进程之间不共享全局变量Copy执行结果:
add: 0
add: 1
add: 2
add: 3
add: 4
add_data: [0, 1, 2, 3, 4]
main: []
read_data []Copy进程之间不共享全局变量的解释效果图: 3. 进程之间不共享全局变量的小结
创建子进程会对主进程资源进行拷贝也就是说子进程是主进程的一个副本好比是一对双胞胎之所以进程之间不共享全局变量是因为操作的不是同一个进程里面的全局变量只不过不同进程里面的全局变量名字相同而已。
4. 主进程会等待所有的子进程执行结束再结束
假如我们现在创建一个子进程这个子进程执行完大概需要2秒钟现在让主进程执行0.5秒钟就退出程序查看一下执行结果示例代码如下:
import multiprocessing
import time# 定义进程所需要执行的任务
def task():for i in range(10):print(任务执行中...)time.sleep(0.2)if __name__ __main__:# 创建子进程sub_process multiprocessing.Process(targettask)sub_process.start()# 主进程延时0.5秒钟time.sleep(0.5)print(over)exit()# 总结 主进程会等待所有的子进程执行完成以后程序再退出Copy执行结果:
任务执行中...
任务执行中...
任务执行中...
over
任务执行中...
任务执行中...
任务执行中...
任务执行中...
任务执行中...
任务执行中...
任务执行中...Copy说明:
通过上面代码的执行结果我们可以得知: 主进程会等待所有的子进程执行结束再结束
假如我们就让主进程执行0.5秒钟子进程就销毁不再执行那怎么办呢?
我们可以设置守护主进程 或者 在主进程退出之前 让子进程销毁
守护主进程:
守护主进程就是主进程退出子进程销毁不再执行
子进程销毁:
子进程执行结束
保证主进程正常退出的示例代码:
import multiprocessing
import time# 定义进程所需要执行的任务
def task():for i in range(10):print(任务执行中...)time.sleep(0.2)if __name__ __main__:# 创建子进程sub_process multiprocessing.Process(targettask)# 设置守护主进程主进程退出子进程直接销毁子进程的生命周期依赖与主进程# sub_process.daemon Truesub_process.start()time.sleep(0.5)print(over)# 让子进程销毁sub_process.terminate()exit()# 总结 主进程会等待所有的子进程执行完成以后程序再退出# 如果想要主进程退出子进程销毁可以设置守护主进程或者在主进程退出之前让子进程销毁Copy执行结果:
任务执行中...
任务执行中...
任务执行中...
overCopy5. 主进程会等待所有的子进程执行结束再结束的小结
为了保证子进程能够正常的运行主进程会等所有的子进程执行完成以后再销毁设置守护主进程的目的是主进程退出子进程销毁不让主进程再等待子进程去执行。设置守护主进程方式 子进程对象.daemon True销毁子进程方式 子进程对象.terminate()