)
这是我的第473篇原创文章。一、引言1、多进程完成多任务① 导入进程包 import multiprocessing ② 通过进程类创建进程对象 进程对象 multiprocessing.Process() ③ 启动进程执行任务 进程对象.start()2、通过进程类创建进程对象进程对象 multiprocessing.Process([group [, target任务名 [, name]]])参数说明参数名说明执行的目标任务名这里指的是函数名(方法名)name进程名一般不用设置group进程组目前只能使用None二、实现过程2.1 主进程与子进程案例结果解读有一个名为demo0.py的事物 , 此事物算作是一个程度相当简单的程序也可称脚本。存在这么一种情况 , 一旦运行了demo0.py这么一个程序 就是具体的demo0.py , 便会执行mian函数此时主进程方面呈现为2620。随后 , 以一种遵照代码规定执行顺序的方式前进 , 只有等到work1函数执行结束之后 , 才有前提能够去执行work2函数。关于这两个函数 , 它们均处于main函数的进程范围之内。案例结果解读定义了两个函数, 其中一个函数是music() , 另一个函数是() , 这两个函数分别用于在进程里执行听音乐以及编写代码的任务。在函数当中运用了os.() 以及os.() 来获取当前进程和父进程的ID。采用了.( )函数去构建两个进程, 进程运行music( )函数, 并且进程运行( )函数。于主进程里头, 运用.start()方法去开启两个子进程的执行, 对运行结果展开观察之际能够发觉, music()函数以及()函数的任务是在两个子进程之中以并行的方式去施行的。2.2 进程间不共享全局变量事实上, 去创建一个子进程这般行为来讲乃是将主进程所含有的资源予以拷贝, 进而产生出了一个全新的进程, 在此处, 主进程与子进程两者之间是相互独立的状态。存在三个进程, 每个进程各自所操作的均是自身进程内部的全局变量, 不会对别的进程里面的全局变量造成影响, 所以进程之间不存在共享全局变量的情况, 仅仅是进程之间全局变量的名字是相同的罢了, 然而所操作的并非是同一个进程里边的全局变量。为了确保主进程于所有子进程均执行完毕之后才终结设有加入它的方法, 反倒不然的话主进程会在子进程尚未执行完竣之际就告终结了。在多进程编程里面, 子进程的执行呈现异步状态, 主进程跟子进程是并发执行的情形, 要是主进程没等子进程执行完就结束了, 那子进程有可能被强制终止, 致使程序出现异常或者数据丢失这类问题。所以, 在启动子进程以后, 应当调用join()方法去等待子进程执行完再结束主进程, 以此保障程序的正常运行。join()方法会让主进程阻塞, 直到所有子进程都执行完才会接着执行主进程。示例结果2.3 控制子进程的运行和终止(保证主进程退出子进程销毁)案例结果因子进程与主进程并行执行, 故主进程延迟1秒后, 子进程仍于执行工作函数里的任务。所以, 输出的信息或会在子进程输出信息之前得以出现, 又或会继子进程输出信息之后才呈现, 具体取决于操作系统的调度策略。解决方案一设置守护进程案例结果解读因为子进程属于守护进程, 跟着主进程的退出, 子进程就会被销毁, 而不会再去执行存在于work函数里边的代码。解决方案二销毁子进程案例结果解读令子进程直接进行销毁操作, 此操作意味着终止其执行运行流程, 当主程序进程退出之前之时辰时刻, 将全部所有的子进程直接予以销毁处理就行得通了。作者有着读研时发表6篇与SCI数据算法有关论文的经历, 当下正在某研究院做和数据算法相关的研究工作, 会依据自身科研实践经历, 持续去分享涵盖数据分析、特征工程、机器学习、深度学习、人工智能整套基础知识与案例, 可关注gzh: 数据杂坛, 以此来获取数据以及源码。