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

时间:2018-12-13 09:06:18

标签: python multiprocessing

我有一个使用joblibs和多处理模块的示例代码。从命令行运行时,代码可以正常工作,但是当我使用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()参数。但是没有用。

0 个答案:

没有答案