Windows多处理

正如我所发现的那样,当涉及到多处理时,窗口有点像猪,我对此有疑问。

在使用多处理时 ,pydoc应该保护windows应用程序的入口点 。

这是否意味着只有创build新过程的代码?

例如

脚本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() 

在这个脚本中,你需要把这个包装在main中,因为这个线程正在产生这个进程。 但是如果你有呢?

脚本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' 

在这种情况下需要保护什么? 如果在文件2中有一个if __main__,会发生什么情况,如果正在创build一个进程,那么这个内部的代码会被执行吗?

注意:我知道代码将不会编译。 这只是一个例子。

Solutions Collecting From Web of "Windows多处理"

在使用多处理时,pydoc应该保护windows应用程序的入口点。

我的解释不同:文件说明

主模块可以通过一个新的Python解释器安全地导入,而不会造成意想不到的副作用(例如启动一个新的进程)。

所以导入你的模块( import mymodule )不应该创建新的进程。 也就是说,你可以通过用一个保护你的进程创建代码来避免启动进程

 if __name__ == '__main__': ... 

因为只有当程序作为主程序运行时,才会运行…中的代码

 python mymodule.py 

或者当您将其作为可执行文件运行时,而不是在import文件时。

所以,要回答你关于file2的问题:不,你不需要保护,因为在import file2期间没有启动进程。

另外,如果你if __name__ == '__main__'放置了一个if __name__ == '__main__' ,它将不会运行,因为file2被导入,不会作为主程序执行。

编辑: 这里是一个当你不保护你的进程创建代码时会发生什么的例子:它可能只是循环并创建了大量的进程。