在主脚本之外使用python多进程

时间:2016-08-15 16:03:47

标签: python python-3.x python-multithreading python-multiprocessing

根据python多进程的docs,进程的产生需要在if __name__ == '__main__':子句内部,以防止产生无限进程。

我的问题是,是否可以在导入中使用多进程?

这方面的一些事情: 假设我有这个py是主要执行文件:

import foo

def main():
    foo.run_multiprocess()

if __name__ =='__main__':
    main()

和导入的foo.py文件:

def run_multiprocess(number_to_check):
    if number_to_check == 5:
        print(number_to_check)

if __name__ == '__main__':
    list_to_check = {1,2,3,4,5,6,7}
    pool = Pool(processes=4)             
    pool.map(process_image, list_to_check) 

显然这不起作用,因为foo.py中if语句中的代码不会运行。有没有办法使它工作?

1 个答案:

答案 0 :(得分:1)

多处理不必在__main__块中运行,__main__块仅在文件通过python filename.py运行时使用。

所以,如果你这样做了:

m1.py

from multiprocessing import Pool    
def f(x):
    return x^2

def f2():
    p = Pool(5)
    p.map(f, [1,2,3,4,5])

m2.py

from m1 import f2

def __main__(): # this is not required, but a good practice
    f2() # this would run multiprocessing code

然后调用python m2.py,您的代码将以mp。

正确运行