【发布时间】: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'
哪个工作正常。但我想它可能会因为复杂的参数而失败,比如大型列表或对象或类似的东西。
还有其他方法可以传递参数吗??
【问题讨论】:
-
您可以传递原始参数,但不能传递对象。进程不共享内存。看看这个答案stackoverflow.com/questions/18114285/…
-
这个也有你需要的信息。 stackoverflow.com/questions/4063220/…
-
@Boris 进程不共享内存。在这里,我不想在进程之间共享变量。但是在创建过程时,我试图传递多处理中实际允许的参数。
标签: python object arguments multiprocessing