Jak połączyć Pool.map z Array (pamięć współdzielona) w multiprocessingu Pythona?

Mam bardzo dużą (tylko do odczytu) tablicę danych, które chcę przetwarzać równolegle w wielu procesach.

Lubię funkcję Pool.map i chciałbym używać jej do obliczania funkcji na tych danych równolegle.

Widziałem, że można użyć klasy Value lub Array do użycia danych pamięci współdzielonej między procesami. Ale kiedy próbuję tego użyć, otrzymuję błąd RuntimeError: 'Obiekty synchroniczneString powinny być współużytkowane tylko między procesami poprzez dziedziczenie podczas korzystania z funkcji Pool.map:

Oto uproszczony przykład tego, co próbuję zrobić:

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"]] )

Czy ktoś może mi powiedzieć, co robię źle tutaj?

Tak więc chciałbym przekazać informacje o nowo utworzonej tablicy przydzielonej pamięci współdzielonej procesom po ich utworzeniu w puli procesów.

questionAnswers(4)

yourAnswerToTheQuestion