У меня есть очень большой (только для чтения) массив данных, который я хочу обрабатывать несколькими процессами параллельно.
Мне нравится функция Pool.map и хотел бы использовать ее для вычисления функций по этим данным параллельно.
Я видел, что для использования данных разделяемой памяти между процессами можно использовать класс Value или Array. Но когда я пытаюсь использовать это, я получаю 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"]] )
Может ли кто-нибудь сказать мне, что я делаю неправильно здесь?
Так что я хотел бы сделать, это передать информацию о вновь созданном распределенном распределяемом массиве памяти для процессов после того, как они были созданы в пуле процессов.
