Python Windows多处理

Python Windows多处理,python,windows,multiprocessing,Python,Windows,Multiprocessing,正如我所发现的,当涉及到多处理时,windows有点像猪,对此我有一些疑问 pydoc声明您应该 这是否意味着只有创建新流程的代码 比如说 脚本1 在这个脚本中,您需要在ifmain中包装它,因为该行正在生成进程。 但是如果你有呢? 脚本2 file1.py import file2 if __name__ == '__main__': p = Aclass().start() import multiprocessing ITEM = 0 def method1(): pri

正如我所发现的,当涉及到多处理时,windows有点像猪,对此我有一些疑问

pydoc声明您应该

这是否意味着只有创建新流程的代码

比如说

脚本1 在这个脚本中,您需要在ifmain中包装它,因为该行正在生成进程。 但是如果你有呢?

脚本2 file1.py

import file2
if __name__ == '__main__':
    p = Aclass().start()
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'
file2.py

import file2
if __name__ == '__main__':
    p = Aclass().start()
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\uuu main\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu

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

pydoc声明在使用多处理时应保护windows应用程序的入口点

我的解释不同:文件说明

新的Python解释器可以安全地导入主模块,而不会产生意外的副作用(例如启动新进程)

因此,导入模块(
import mymodule
)不应创建新的进程。也就是说,您可以通过使用

if __name__ == '__main__':
    ...
因为代码在。。。将仅在程序作为主程序运行时运行,即

python mymodule.py
或者当您将其作为可执行文件运行时,而不是当您导入文件时

因此,要回答您关于
文件2
的问题:不,您不需要保护,因为在
导入文件2
期间没有启动任何进程

另外,如果在
file2.py
中放置
if uuuuu name\uuuuu=='\uuuuu main\uuuuu'
,它将不会运行,因为
file2
是导入的,而不是作为主程序执行的

编辑:是一个例子,说明了当您不保护创建代码的流程时可能发生的情况:它可能只是循环并创建大量流程