【问题标题】:Python subclassing process with parameter带参数的Python子类化过程
【发布时间】:2015-04-26 23:33:42
【问题描述】:

我正在尝试创建一个对象,但它是一个新进程。我正在关注this guide 并想出了这段代码。

import multiprocessing as mp 
import time

class My_class(mp.Process):
    def run(self):
        print self.name, "created"
        time.sleep(10)
        print self.name, "exiting"
        self.x()

    def x(self):
        print self.name, "X"

if __name__ == '__main__':
    print 'main started'
    p1=My_class()
    p2=My_class()
    p1.start()
    p2.start()  
    print 'main exited'

但在这里我无法将参数传递给对象。我搜索但没有找到。它不像一个普通的多进程,我们会做这样的事情:

p1 = multiprocessing.Process(target=My_class, args=('p1',10,))

将参数传递给新进程。 但是类实例的多处理是不同的。现在我正在像下面这样艰难地通过它。

import multiprocessing as mp 
import time

class My_class(mp.Process):
    my_vars={'name':'', 'num':0}
    def run(self):
        self.name=My_class.my_vars['name']
        self.num=My_class.my_vars['num']
        print self.name, "created and waiting for", str(self.num), "seconds"
        time.sleep(self.num)
        print self.name, "exiting"
        self.x()

    def x(self):
        print self.name, "X"

if __name__ == '__main__':
    print 'main started'
    p1=My_class()
    p2=My_class()
    My_class.my_vars['name']='p1'
    My_class.my_vars['num']=20
    p1.start()
    My_class.my_vars['name']='p2'
    My_class.my_vars['num']=10
    p2.start()  
    print 'main exited'

哪个工作正常。但我想它可能会因为复杂的参数而失败,比如大型列表或对象或类似的东西。

还有其他方法可以传递参数吗??

【问题讨论】:

标签: python object arguments multiprocessing


【解决方案1】:

您可以只为My_class 实现一个__init__ 方法,该方法接受您要提供的两个参数:

import multiprocessing as mp 
import time

class My_class(mp.Process):
    def __init__(self, name, num):
        super(My_class, self).__init__()
        self.name = name
        self.num = num

    def run(self):
        print self.name, "created and waiting for", str(self.num), "seconds"
        time.sleep(self.num)
        print self.name, "exiting"
        self.x()

    def x(self):
        print self.name, "X"

if __name__ == '__main__':
    print 'main started'
    p1=My_class('p1', 20)
    p2=My_class('p2', 10)
    p1.start()
    p2.start()  
    print 'main exited'

您只需要确保在您的__init__ 方法中调用super(My_class, self).__init__(),以便您的类正确初始化为Process 子类。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-12-17
    • 1970-01-01
    • 2018-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-28
    相关资源
    最近更新 更多