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