0

我有一些独立的线程,如果我可以将它们放入 Process 中,它们可能会获得一些速度。

我将类 x(Thread): 与 def run(self): 更改为类 x(Process)... 但进程似乎没有调用 run()。

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

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

1 回答 1

2

您可能只是缺少调用instance.start()whereinstance是您之前设置为class x.

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

一种方法是:

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

具有f任何功能。第一行设置一个新Process实例,第二行分叉并因此启动(子)进程,并p.join()等待它完成。这是文档的确切示例

在第二个用例中,您从 子类化class Process,然后target在调用构造函数时通常不指定 a 。run是实际调用方法时作为分叉调用的默认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 数据类型之间切换,只需很少的代码更改。当然,数据共享的工作方式发生了变化,线程和进程的通信也不同。

于 2013-02-22T13:19:55.203 回答