我有以下内容:
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中监视/利用这些信息吗?
答案 0 :(得分:0)
我不确定在使用multiprocessing.Pool
时是否有一种简单的方法来告诉用户腌制了哪些信息以及继承了哪些信息。但是,在您的代码示例中,我相信is_this_pickled
变量实际上是不腌制的,因为它绝不会以任何方式传递给Pool
对象。底层mmap
对象应由子进程继承。