我在pas-hour上一直在看以下问题,但没有任何运气:
Python sharing a dictionary between parallel processes
multiprocessing: sharing a large read-only object between processes?
multiprocessing in python - sharing large object (e.g. pandas dataframe) between multiple processes
我写了一个非常基本的测试文件来说明我要做的事情:
from collections import deque
from multiprocessing import Process
import numpy as np
class TestClass:
def __init__(self):
self.mem = deque(maxlen=4)
self.process = Process(target=self.run)
def run(self):
while True:
self.mem.append(np.array([0, 1, 2, 3, 4]))
def print_values(x):
while True:
print(x)
test = TestClass()
process = Process(target=print_values(test.mem))
test.process.start()
process.start()
目前,它输出以下内容:
^{pr2}$如何从主代码或运行“打印值”的进程访问mem值?在
不幸的是,}。一个
multiprocessing.Manager()
不支持deque
,但它可以与list
、dict
、Queue
、Value
和{list
非常接近,所以我在下面的示例中使用了它。。在在使用管理器对象时要小心一点。你可以像它们引用的对象一样使用它们,但是你不能做像。。。
mem = mem[-4:]
以截断值,因为您正在更改被引用对象。在至于编码风格,我可能会将
Manager
对象移到类之外,或者将print_values
函数移到类内,但举个例子,这是可行的。如果要移动对象,只需注意不能在run
方法中直接使用self.mem
。您需要在启动进程时传递它,否则python在后台执行的fork
将创建一个新实例,并且不会共享它。在希望这对你的情况有用,如果不行,我们可以尝试调整一下。在
因此,通过结合@bivouac0提供的代码和@Marijn Pieters发布的评论,我想出了以下解决方案:
相关问题 更多 >
编程相关推荐