甚至在完成后仍运行无限子进程的多处理模块

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了甚至在完成后仍运行无限子进程的多处理模块相关的知识,希望对你有一定的参考价值。

我有一个使用joblib和多处理模块的示例代码。从命令行运行时,代码运行良好,但是当我使用Pyinstaller将其打包为可执行文件时,多个进程将无限生成为新实例(在后端创建新的子进程ID)。

在确定大量源之后,建议在multiprocessing.freeze_support()块的开头使用if __name__ == "__main__":

这解决了我的主脚本的无限调用,但是在代码完成后,仍然有一个遗漏的子进程在后台运行,并且始终使用下面的进程名称来调用新的进程ID:

user 2741 1 28 14:25 pts/5 00:00:00 /home/user/ParallelProcessing -E -s -B -S -c from multiprocessing.semaphore_tracker import main;main(5)

几秒钟后(进程ID更改)

user 2745 1 28 14:25 pts/5 00:00:00 /home/user/ParallelProcessing -E -s -B -S -c from multiprocessing.semaphore_tracker import main;main(5)

我想知道我在代码中缺少哪些其他部分,以避免出现此类问题。

代码:

from joblib import Parallel, delayed                            
import multiprocessing                            
import time                            
inputs = range(10)                             
def processInput(i):                            
    print("Started : ",i)                            
    time.sleep(i)                            
    print("Completed : ",i)                            
    return i * i


def main():                            
    num_cores = multiprocessing.cpu_count()                            
    backend = 'threading'                            
    print(num_cores)                            
    results = Parallel(n_jobs=num_cores, backend=backend)(delayed(processInput)(i) for i in inputs)                            
    print(results)


if __name__ == "__main__":                            
    multiprocessing.freeze_support()                            
    main()

UPDATE:在backend调用期间尝试了Parallel()参数。但是没有用。

答案

您能找到解决此问题的任何方法吗?我陷入了完全相同的问题。.

以上是关于甚至在完成后仍运行无限子进程的多处理模块的主要内容,如果未能解决你的问题,请参考以下文章

python并发编程中的多进程(代码实现)

查询完成后仍在运行

运行 NPM 子进程导致“找不到模块”

python3中的多处理在mac和linux上运行时得到不同的值

获取子进程的pid

multiprocessing模块创建进程