python multiprocessing 不断产生整个脚本

Posted

技术标签:

【中文标题】python multiprocessing 不断产生整个脚本【英文标题】:python multiprocessing keeps spawning the whole script 【发布时间】:2020-07-03 09:17:43 【问题描述】:

我无法组织我的脚本以使用多处理。似乎产生了进程,但它一次又一次地执行整个脚本。在这个例子中,它会不断地print("PREPARATION")。 我认为我的问题在于脚本的组织。

import subprocess as sp
import multiprocessing


def func1():
   blah
   blah
   blah

def func2():
   blah
   blah
   blah

def derev_work(cmd):
    proc = sp.run(cmd)
    print(proc.stdout)

def main():

    print("PREPARATION")
    cmd_list = [[path_to_exe, arg1, arg2, arg3] for sheet in sortedsheets]

    if __name__=="__main__":
        print (multiprocessing.cpu_count())
        pool = multiprocessing.Pool(multiprocessing.cpu_count())

        results = []
        r = pool.map_async(derev_work, cmd_list , callback=results.append)
        r.wait()
        print(results)

    print("COMPLETION")

main()

【问题讨论】:

这能回答你的问题吗? Multiprocessing launching too many instances of Python VM 【参考方案1】:

你需要使用

if __name__ == "__main__":
   main()

成语。

multiprocessing docs里解释的很清楚:

相反,应该使用if __name__ == '__main__': 来保护程序的“入口点”,如下所示...

【讨论】:

我没有理解 'if name == "main":' 是“保护”...明白了现在...谢谢! ***.com/questions/1923706/…

以上是关于python multiprocessing 不断产生整个脚本的主要内容,如果未能解决你的问题,请参考以下文章

python MultiProcessing模块进程间通信的解惑与回顾

python MultiProcessing标准库使用Queue通信的注意要点

cx_freeze multiprocessing 打包后反复重启

python多进程multiprocessing

python之multiprocessing:multiprocessing.Pool

Python multiprocessing