2013-02-21 24 views
0

我有一些独立的线程,如果我可以将它们放入进程,可能会获得一些速度。我改变了类x(线程):用一个def run(self):进入一个类x(Process)...但是Process似乎没有调用run()。从Thread类的Python3到进程

什么是设置过程的正确语法?

def __init()__: 
    Process.__init()__(self, Target=self.run, args=(self,)): ??? 

回答

2

你可能只是缺乏调用instance.start()其中instance是您先前设置为您class x的实例变量。

如果您提供更多(代码)上下文,则更容易回答。从我看到你正在混合两种不同的方式来设置和启动一个新的线程或过程。这不一定是坏事,也可能是故意的。但如果不是,那么你输入的内容比你需要的要多。

一种方法是:

p = Process(target=f, args=('bob',)) 
p.start() 
p.join() 

f是任何功能。第一行建立一个新的Process实例,第二行分叉并因此启动(子)进程,并且p.join()等待它完成。这是the documentation

在第二个用例的具体例子,你从class Process子类,然后调用构造函数时,你通常不会指定targetrun是实际调用process.start()方法时作为分叉调用的默认方法。

class MySubProcess(multiprocessing.Process): 
    def __init__(self, *args, **kwargs): 
     super().__init__(self) 
     # some more specific setup for your class using args/kwargs 
    def run(self): 
     # here's the code that is going to be run as a forked process 
     pass 

然后用

p = MySubProcess(any_args_here) 
p.start() 
p.join() 

运行。如果你不需要任何参数则没有必要定义一个__init__构造你的子类。

这两种方法都允许在代码更改很少的情况下在threading.Thread和multiprocessing.Process数据类型之间切换。当然,数据共享的工作方式会发生变化,而线程和进程的通信方式也不尽相同。

+0

谢谢,我刚刚回到这里来自己添加一个答案:-)我只是觉得它不工作,实际上,run()方法中的eclipse/pydev断点正在搞砸了。通过放置print()函数,我能够看到发生了什么。 – 2013-02-22 14:12:03