访问sharedctypes Array的元素

时间:2017-08-15 11:58:25

标签: python arrays multiprocessing ctypes

我正在尝试使用多处理模块的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

0 个答案:

没有答案