Как проверить, какие данные протравливаются между процессами - PullRequest
1 голос
/ 12 июня 2019

У меня есть следующее:

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 голосов
/ 13 июня 2019

Я не уверен, существует ли простой способ определить, какая информация маринована и какая информация наследуется при использовании multiprocessing.Pool.Тем не менее, в вашем примере кода я уверен, что переменная is_this_pickled на самом деле не засечена, поскольку она никогда не передается объекту Pool каким-либо образом.Базовый объект mmap должен наследоваться дочерними процессами.

...