Wie kombiniere ich Pool.map mit Array (Shared Memory) in Python Multiprocessing?

Ich habe eine sehr große (nur Lesen) array mit Daten, die ich will verarbeitet werden, die mehrere Prozesse parallel.

Ich mag den Pool.map-Funktion auf und möchte es verwenden, um zu berechnen Funktionen auf, die die Daten parallel.

Sah ich, dass man verwenden kann, die den Wert oder die Array-Klasse verwenden shared memory, Daten zwischen Prozessen. Aber wenn ich versuche, mit dieser bekomme ich einen Absturz mit Laufzeitfehler: 'SynchronizedString Objekte sollten nur dann geteilt werden zwischen Prozessen, die durch Vererbung, wenn Sie den Pool.map-Funktion:

Hier ist ein Vereinfachtes Beispiel, was ich versuche zu tun:

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

Kann mir jemand sagen was mache ich hier falsch?

Also, was ich möchte zu tun ist, übergeben Sie Informationen über einen neu erstellten freigegebenen Speicher-array, um die Prozesse, nachdem Sie erstellt wurden in der Prozess-pool.

InformationsquelleAutor der Frage Jeroen Dirks | 2009-11-04

Schreibe einen Kommentar