Wie kann ich dies vermeiden, Beizen Fehler, und was ist der beste Weg zu parallelisieren Sie diesen code in Python?

Ich habe den folgenden code.

def main():
  (minI, maxI, iStep, minJ, maxJ, jStep, a, b, numProcessors) = sys.argv
  for i in range(minI, maxI, iStep):
    for j in range(minJ, maxJ, jStep): 
      p = multiprocessing.Process(target=functionA, args=(minI, minJ))
      p.start()
      def functionB((a, b)):
        subprocess.call('program1 %s %s %s %s %s %s' %(c, a, b, 'file1', 
          'file2', 'file3'), shell=True)
        for d in ['a', 'b', 'c']:
          subprocess.call('program2 %s %s %s %s %s' %(d, 'file4', 'file5', 
            'file6', 'file7'), shell=True)
      abProduct = list(itertools.product(range(0, 10), range(0, 10)))
      pool = multiprocessing.Pool(processes=numProcessors)
      pool.map(functionB, abProduct) 

Produziert den folgenden Fehler.

Exception in thread Thread-1:
Traceback (most recent call last):
  File "/usr/lib64/python2.6/threading.py", line 532, in __bootstrap_inner
    self.run()
  File "/usr/lib64/python2.6/threading.py", line 484, in run 
    self.__target(*self.__args, **self.__kwargs)
  File "/usr/lib64/python2.6/multiprocessing/pool.py", line 255, in _handle_tasks
    put(task)
PicklingError: Can't pickle <type 'function'>: attribute lookup __builtin__.function fa
iled

Den Inhalt funktionalisierte unwichtig sind, und nicht wird ein Fehler erzeugt. Der Fehler scheint aufzutreten, wenn ich versuche die Karte functionB. Wie Entferne ich diese Fehlermeldung, und was ist der beste Weg zu parallelisieren Sie diesen code in Python 2.6?

InformationsquelleAutor idealistikz | 2012-07-02
Schreibe einen Kommentar