2014-05-08 6 views
10

Bitte eine Klasse wie folgt betrachten:Multicore-Programmierung

class Foo: 
    def __init__(self, data): 
     self.data = data 

    def do_task(self): 
     #do something with data 

In meiner Anwendung habe ich eine Liste mehrere Instanzen von Foo Klasse enthält. Ziel ist es, für alle Foo-Objekte do_task auszuführen. Eine erste Implementierung ist einfach:

#execute tasks of all Foo Object instantiated 
for f_obj in my_foo_obj_list: 
    f_obj.do_task() 

I Vorteil von Multi-Core-Architektur zu übernehmen möchten, dass der for Zyklus zwischen 4 CPUs meiner Maschine zu teilen.

Was ist der beste Weg, es zu tun?

+1

Sie können Multiprocessing-Modul verwenden. https://docs.python.org/2/library/multiprocessing.html – NorthCat

+0

versuchen Sie [hier] (http://Stackoverflow.com/a/1182350/1982962) es wird Ihnen helfen –

Antwort

4

Statt durch alle Multithreading/Multi-Core-Grundlagen zu gehen, würde Ich mag einen Beitrag von Ryan W. Smith verweisen: Multi-Core and Distributed Programming in Python

er in die Details gehen, wie Sie mehrere Kerne und nutzen diese Konzepte nutzen können. Aber seien Sie vorsichtig, wenn Sie mit allgemeinen Multithreading-Konzepten nicht vertraut sind.

können Sie auch den Algorithmus/Funktion für jeden Kern anpassen.

14

Sie können process pools im Multiprocessing-Modul verwenden.

def work(foo): 
    foo.do_task() 

from multiprocessing import Pool 

pool = Pool() 
pool.map(work, my_foo_obj_list) 
pool.close() 
pool.join() 
+0

+1 Dies ist ein sehr schön und schnell zu implementieren. –