如何从函数并行启动2个(或更多)进程

时间:2013-12-03 14:01:05

标签: python multiprocessing

我试图从一个类中的函数并行启动2个进程,但它不起作用。我正在尝试这样的事情:

 from multiprocessing import Process

 class MyClass():

     #something here to create a large list L

     def myClassFunction1():
        #something here
        ....
        ....
     def myClassFunction2():
        #something here
        p1 = Process(target=myProcess1,args=(L,))
        p2 = Process(target=myProcess2,args=(L,))
        p1.start()
        p2.start()
        p1.join()
        p2.join()
        #something else here

    def myProcess1(L):
        #do something here with L

    def myProcess2(L):
        #do something here with L

我在python中不是很好.....我并不理解多处理的工作原理。我希望有人可以给我一些帮助。

谢谢!

3 个答案:

答案 0 :(得分:0)

您需要将这些函数称为实例方法:

p1 = Process(target=self.myProcess1,args=(L,))
p2 = Process(target=self.myProcess2,args=(L,))

在你的工作函数中,添加self作为第一个参数:

def myProcess1(self, L):
    #do something awesome with L
def myProcess1(self, L):
    #do something as awesome as myProcess1 with L

希望这有帮助!

答案 1 :(得分:0)

我之前从未使用过多处理模块,但您可以使用线程模块......

import threading

class worker (threading.Thread):
    def __init__(self,extraArgs):
        threading.Thread.__init__(self)
        self.storeArgs = extraArgs
    def run(self):
        //add code can use self.storeArgs


a = worker(argsA)
b = worker(argsB)
a.start()  //starts concurrent thread using worker.run()
b.start()  //starts concurrent thread using worker.run()

while threading.activeCount()>1:  //loop to make sure threads are finished running
    continue    

您可以为要运行的不同方法创建两个类,或者为worker提供两个方法,并使用if / else或case逻辑来决定在其中使用哪个方法的run / start方法

答案 2 :(得分:0)

只需在创建流程之前定义功能。 Python解释器逐行读取模块,当它到达创建过程的行时,函数未定义。

我建议您将这些功能放在一个单独的模块中,然后从那里导入。