python subprocess Process 目标函数不会实例化 类

python subprocess Process target function won't instantiate classes

我正在尝试使用 subprocess.Process 并行启动多个操作。我遇到的问题是,如果我尝试在目标函数中实例化 class 的实例,则不会发生任何事情。但是,如果我首先实例化 classes 并将实例传递给目标函数,那么一切正常。这是我正在做的事情的抽象

启动前实例化流程:一切正常

def spawn(my_class_instance):
    my_class_instance.launch()

for params in my_list_of_parameters:
   an_instance = MyClass(params)
   Process(target=spawn, args=(an_instance)).start()

在目标函数内部实例化:不起作用

def spawn(params):
   an_instance = MyClass(params)
   an_instance.launch()

for params in my_list_of_parameters:
   Process(target=spawn, args=(params)).start()

我真的很想了解更多关于 为什么 在目标函数中尝试实例化 classes 不起作用的原因。跟马上调用Process.start()有关系吗?幕后发生了什么阻止了这种情况?

可能导致此问题的一件事是每个 MyClass.launch() 本身调用 subprocess.Popen(..., shell=False),以防这可能是原因。如果是这样,为什么?它仍然在第一种情况下被调用。

谢谢!

这行得通。不过,我可能是你的问题。

from multiprocessing import Process

class MyClass:
  def __init__(self, params):
    pass

  def launch(self):
    print "method launch is called"

def spawn(params):
  an_instance = MyClass(params)
  an_instance.launch()

my_list_of_parameters  = ['1', '2']

for params in my_list_of_parameters:
   Process(target=spawn, args=(params)).start()