如何检查流程之间腌制的数据

时间:2019-06-12 20:56:26

标签: python-3.x pickle python-multiprocessing mmap

我有以下内容:

from struct import pack_into
from mmap import mmap
from multiprocessing import Pool


mem_label = "packed_ints"
total = 5 * 10**7


def create_mmap(size = total):
    ''' Seems only the Windows version of mmap accepts labels '''

    is_this_pickled = mmap(-1, total * 4, mem_label)


def pack_into_mmap(idx_nums_tup):

    idx, ints_to_pack = idx_nums_tup
    pack_into(str(len(ints_to_pack)) + 'i', mmap(-1, total * 4, mem_label) , idx*4*total//2 , *ints_to_pack)


if __name__ == '__main__':

    create_mmap()
    ints_to_pack = range(total)

    pool = Pool()
    pool.map(pack_into_mmap, enumerate((ints_to_pack[:total//2], ints_to_pack[total//2:])))

我将“初始” mmap“隐藏”在一个函数中,但是我想肯定地知道正在腌制什么。

我可以在Python中监视/利用这些信息吗?

1 个答案:

答案 0 :(得分:0)

我不确定在使用multiprocessing.Pool时是否有一种简单的方法来告诉用户腌制了哪些信息以及继承了哪些信息。但是,在您的代码示例中,我相信is_this_pickled变量实际上是腌制的,因为它绝不会以任何方式传递给Pool对象。底层mmap对象应由子进程继承。