我有一些独立的线程,如果我可以将它们放入Process中,可能会获得一些速度。
我更改了类x(Thread):使用def运行(self):进入类x(进程)...但是Process似乎没有调用run()。
设置流程的正确语法是什么?
def __init()__:
Process.__init()__(self, Target=self.run, args=(self,)): ???
答案 0 :(得分:2)
您可能只是缺少致电instance.start()
,其中instance
是您之前设置为class x
实例的变量。
如果您提供更多(代码)上下文,则更容易回答。从我看到你正在混合两种不同的方式来设置和启动新的线程或进程。这不一定是坏事,也可能是故意的。但如果不是,那么你输入的内容超出了你的需要。
一种方法是:
p = Process(target=f, args=('bob',))
p.start()
p.join()
f
是任何功能。第一行设置新的Process
实例,第二行分叉,从而启动(子)进程,p.join()
等待它完成。这是the documentation
在第二个用例中,您从class Process
继承,然后在调用构造函数时通常不指定target
。 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数据类型之间切换,只需很少的代码更改。当然,数据共享的工作方式会发生变化,并且线程和进程的通信也会有所不同。