从 __init__() 开始 class 中的方法 multiprocessing.Process
Start multiprocessing.Process of method in class, from __init__()
如何从 class 的 __init__()
中启动 multiprocessing.Process,并针对 class 中的另一个函数? class 本身不应是进程。 __init__()
应引用在 class 中分配的 class 变量,而不是在任何函数内部。
工作代码:
import multiprocessing as mp
class SomeClass:
def __init__(self):
p_process1 = mp.Process(target=self.process1)
p_process1.start()
def process1(self):
while True:
pass
我要的代码:
import multiprocessing as mp
class SomeClass:
def __init__(self):
self.p_process1.start()
def process1(self):
while True:
pass
p_process1 = mp.Process(target=process1)
如果我现在尝试 运行 我想要的代码,我会收到一条错误消息:
Process Process-1:
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/multiprocessing/process.py", line 249, in _bootstrap
self.run()
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/multiprocessing/process.py", line 93, in run
self._target(*self._args, **self._kwargs)
TypeError: process1() missing 1 required positional argument: 'self'
好吧,问题清楚地说明了这一点:multiprocessing
调用它时没有参数,但是您期望有一个:self
。在这种情况下,您可以这样解决:
import multiprocessing as mp
class SomeClass:
def __init__(self):
self.p_process1.start()
<b>@staticmethod</b>
<b>def process1(): # so no parameter</b>
while True:
pass
p_process1 = mp.Process(target=process1)
但是,如果 您需要对 self
的引用,除了在您引用 [=11] 的上下文中构造该方法之外别无选择=].毕竟,如果您 获取 self.process1
,您 不会获得对 SomeClass.process1
的引用,您获得的函数是等于 functools.partial(SomeClass.process1,self=self)
,所以你实际上有一个函数,其中 self
被隐式填充。
process1
是一个绑定函数,它需要 class 实例作为 self
被调用时作为第一个参数。
如果您只是想要那个拱门,@property
可以提供帮助。
import multiprocessing as mp
class SomeClass:
def __init__(self):
self.p_process1.start()
def process1(self):
while True:
pass
@property
def p_process1(self):
return mp.Process(target=self.process1)
SomeClass()
如何从 class 的 __init__()
中启动 multiprocessing.Process,并针对 class 中的另一个函数? class 本身不应是进程。 __init__()
应引用在 class 中分配的 class 变量,而不是在任何函数内部。
工作代码:
import multiprocessing as mp
class SomeClass:
def __init__(self):
p_process1 = mp.Process(target=self.process1)
p_process1.start()
def process1(self):
while True:
pass
我要的代码:
import multiprocessing as mp
class SomeClass:
def __init__(self):
self.p_process1.start()
def process1(self):
while True:
pass
p_process1 = mp.Process(target=process1)
如果我现在尝试 运行 我想要的代码,我会收到一条错误消息:
Process Process-1:
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/multiprocessing/process.py", line 249, in _bootstrap
self.run()
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/multiprocessing/process.py", line 93, in run
self._target(*self._args, **self._kwargs)
TypeError: process1() missing 1 required positional argument: 'self'
好吧,问题清楚地说明了这一点:multiprocessing
调用它时没有参数,但是您期望有一个:self
。在这种情况下,您可以这样解决:
import multiprocessing as mp
class SomeClass:
def __init__(self):
self.p_process1.start()
<b>@staticmethod</b>
<b>def process1(): # so no parameter</b>
while True:
pass
p_process1 = mp.Process(target=process1)
但是,如果 您需要对 self
的引用,除了在您引用 [=11] 的上下文中构造该方法之外别无选择=].毕竟,如果您 获取 self.process1
,您 不会获得对 SomeClass.process1
的引用,您获得的函数是等于 functools.partial(SomeClass.process1,self=self)
,所以你实际上有一个函数,其中 self
被隐式填充。
process1
是一个绑定函数,它需要 class 实例作为 self
被调用时作为第一个参数。
如果您只是想要那个拱门,@property
可以提供帮助。
import multiprocessing as mp
class SomeClass:
def __init__(self):
self.p_process1.start()
def process1(self):
while True:
pass
@property
def p_process1(self):
return mp.Process(target=self.process1)
SomeClass()