我正在尝试使用多处理模块的sharedctypes部分在进程之间通过共享内存来节省内存。
documentation中给出的示例要求在使用之前恢复c数组的值(在放入列表的示例中):
from multiprocessing import Process, Lock
from multiprocessing.sharedctypes import Value, Array
from ctypes import Structure, c_double
class Point(Structure):
_fields_ = [('x', c_double), ('y', c_double)]
def modify(n, x, s, A):
n.value **= 2
x.value **= 2
s.value = s.value.upper()
for a in A:
a.x **= 2
a.y **= 2
if __name__ == '__main__':
lock = Lock()
n = Value('i', 7)
x = Value(c_double, 1.0/3.0, lock=False)
s = Array('c', b'hello world', lock=lock)
A = Array(Point, [(1.875,-6.25), (-5.75,2.0), (2.375,9.5)], lock=lock)
p = Process(target=modify, args=(n, x, s, A))
p.start()
p.join()
print(n.value)
print(x.value)
print(s.value)
print([(a.x, a.y) for a in A]) <---- THIS LINE
肯定这通过在进程之间共享来否定 内存已保存,因为共享信息 被复制,就好像每个进程都单独加载了信息。如果我不理解它的工作方式(我可能),请纠正我。
我的问题:sharedctypes数组A
中的信息可以直接访问吗?
我想象过这样的事情:
print(A[:]) <-- prints all values from A
而不是:
print([a for a in A]) <-- creates a new list of values in A, then prints