【发布时间】:2020-09-17 20:21:56
【问题描述】:
我正在尝试理解为什么 python 不能编译下面的类。
class SharedResource(multiprocessing.Lock):
def __init__(self, blocking=True, timeout=-1):
# super().__init__(blocking=True, timeout=-1)
self.blocking = blocking
self.timeout = timeout
self.data = {}
TypeError: 方法需要 2 个参数,得到 3 个
我将 Lock 子类化的原因 我的目标是创建一个共享资源列表,一次只能由 on 进程使用。
这个概念最终会出现在请求不能同时使用资源的 Flash 应用程序中
RuntimeError: 锁对象只能通过继承在进程之间共享
class SharedResource():
def __init__(self, id, model):
'''
id: mode id
model: Keras Model only one worker at a time can call predict
'''
self.mutex = Lock()
self.id = id
self.model = model
manager = Manager()
shared_list = manager.list() # a List of models
shared_list.append(SharedResource())
def worker1(l):
...read some data
while True:
resource = l[0]
with m:
resource['model'].predict(...some data)
time.sleep(60)
if __name__ == "__main__":
processes = [ Process(target=worker1, args=[shared_list])]
for p in processes:
p.start()
for p in processes:
p.join()
【问题讨论】:
-
是给类定义错误还是在您尝试创建对象时出错?你能显示创建此类实例的调用吗?
-
__init__没有任何记录在案的公共参数(有一个ctx)——你正在考虑acquire方法——尽管你可能最好有一个@ 987654327@ 成员而不是子类化 -
@AnthonySottile 这是我的第一次尝试,我添加了更多细节来说明为什么在我的情况下这不起作用
-
继承不是指子类化——你不想继承 Lock。这意味着子进程可以从父进程继承锁。在stackoverflow.com/questions/25557686/… 中讨论
标签: python python-multiprocessing