Please activate JavaScript!
Please install Adobe Flash Player, click here for download

arcAKTUELL 1.2014 - Wertvoll und begehrt

43t ipps u nd t ric k s 43 TIPPS UND TRICKS Für Anwender p = multiprocessing .Process(target=worker, args=(q,)) p.start() processes.append(p) queues.append(q) ## warten, bis alle Prozesse beendet sind for p in processes: p.join() ## alle Queues auf Nachrichten hin abfragen for q in queues: arcpy.AddMessage(q.get()) Die Worker-Funktion nimmt die Queue und alle anderen Argumente für die Bearbeitung der ihr zugedachten Daten entgegen: def worker(q): try: env.overwriteOutput = True ## hier den Job implementieren ## ... q.put(„success“) except arcpy.ExecuteError: q.put(arcpy.GetMessages(2)) except Exception as e: q.put(e.args[0]) Diese beiden beschriebenen Szenarien setzen voraus, dass gezielt ein oder mehrere Jobs einem Prozess zugeord- net werden. Hat man viele einzelne Jobs und möchte es dem System überlassen, welcher Job durch welchen Prozess verarbeitet wird, ist die Multiprocessing.Pool-Strategie die zielführendste. Die Anzahl der abzuarbeitenden Jobs wird über eine Liste der Argumente definiert: try: number_of_processes = multiprocessing.cpu_count() ## Liste der Argumente für jeden Job definieren… args_list = [] for i in range(number_of_jobs): args = … args_list.append(args) pool = multiprocessing .Pool(number_of_processes) pool.map(worker, args_list) pool.close() pool.join() except arcpy.ExecuteError: arcpy.AddMessage (arcpy.GetMessages(2)) return except Exception as e: arcpy.AddMessage (e.args[0]) return Die Map-Funktion des Pools steuert automatisch die Erzeugung der Prozesse, den Aufruf der Funktion und die Zuwei- sung der Argumente zu jedem einzelnen Prozess. Es werden maximal so viele Prozesse gleichzeitig erzeugt, wie man bei der Initialisierung des Pool-Objekts angegeben hat (idealerweise die Anzahl der verfügbaren CPUs). Die Imple- mentierung der Worker-Funktion entspricht dann dem Multiprocessing.Process-Szenario.

Seitenübersicht