python子进程进程目标函数不会实例化类

时间:2015-10-20 05:17:10

标签: python subprocess

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

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

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

我真的很想了解更多关于为什么它没有尝试在目标函数中实例化类的工作。是否与立即致电Process.start()有关?在防止这种情况下发生了什么?

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

谢谢!

1 个答案:

答案 0 :(得分:0)

这很有效。不过,我可能会问你的问题。

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