多视窗(Windows multiprocessing)

2019-08-03 04:00发布

正如我发现窗户有点猪的,当涉及到多,我有一个关于它的问题。

该是pydoc指出,你应该使用多重保护时,一个Windows应用程序的入口点 。

这是否意味着仅创建新进程的代码?

例如

脚本1

import multiprocessing

def somemethod():
    while True:
        print 'do stuff'

# this will need protecting
p = multiprocessing.Process(target=somemethod).start()

# this wont
if __name__ == '__main__':
    p = multiprocessing.Process(target=somemethod).start()

在这个脚本,你需要的,如果包裹这是因为在产卵过程中的线。 但是关于如果你有什么?

脚本2

file1.py

import file2
if __name__ == '__main__':
    p = Aclass().start()

file2.py

import multiprocessing
ITEM = 0
def method1():
    print 'method1'

method1()

class Aclass(multiprocessing.Process):
    def __init__(self):
        print 'Aclass'
        super(Aclass, self).__init__()

    def run(self):
        print 'stuff'

需要在这种情况下要保护什么? 如果有一个,如果在__main__文件2,会发生什么,如果将正在创建进程的这里面的代码得到执行?

注:我知道的代码将无法编译。 这只是一个例子。

Answer 1:

该是pydoc规定使用多的时候,你应该保护Windows应用程序的入口点。

我的解释有所不同:本细则规定

主模块可以通过一个新的Python解释被安全地导入,而不会导致不期望的副作用(例如一个启动一个新的处理)。

所以导入您的模块( import mymodule )不应该创建新进程。 也就是说,你能避免受保护的过程中创造的代码的启动过程

if __name__ == '__main__':
    ...

因为在代码...只会在你的程序运行的主程序运行,也就是说,当你做

python mymodule.py

或者,当你运行它作为一个可执行文件,但不是当你import的文件。

因此,要回答你关于这个问题file2 :没有,因为没有过程在开始时你不需要保护import file2

此外,如果你把一个if __name__ == '__main__'file2.py ,它将无法运行,因为file2是进口的,作为主要程序不执行。

编辑: 这里是当你不保护你的过程中创造的代码会发生什么的例子:它可能只是循环,创造一吨的过程。



文章来源: Windows multiprocessing