Объедините Pool.map с Массивом общей памяти в многопроцессорной обработке Python

У меня есть очень большой массив (только для чтения) данных, что я хочу быть обработанным несколькими процессами параллельно.

Я люблю функцию Pool.map и хотел бы использовать ее для вычисления функций на те данные параллельно.

Я видел, что можно использовать класс Значения или Массива для использования данных общей памяти между процессами. Но когда я пытаюсь использовать это, я получаю RuntimeError: 'Объекты SynchronizedString должны только быть совместно использованы процессами посредством наследования при использовании функции Pool.map:

Вот упрощенный пример того, что я пытаюсь сделать:

from sys import stdin
from multiprocessing import Pool, Array

def count_it( arr, key ):
  count = 0
  for c in arr:
    if c == key:
      count += 1
  return count

if __name__ == '__main__':
  testData = "abcabcs bsdfsdf gdfg dffdgdfg sdfsdfsd sdfdsfsdf"
  # want to share it using shared memory
  toShare = Array('c', testData)

  # this works
  print count_it( toShare, "a" )

  pool = Pool()

  # RuntimeError here
  print pool.map( count_it, [(toShare,key) for key in ["a", "b", "s", "d"]] )

Кто-либо может сказать мне, что я делаю неправильно здесь?

Таким образом, то, что я хотел бы сделать, передать информацию о выделенном массиве недавно созданной общей памяти к процессам после того, как они были созданы в пуле процесса.

52
задан Acumenus 3 October 2019 в 04:54
поделиться