2014-05-08 25 views
10

perche una classe come segue:Python programmazione multicore

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

    def do_task(self): 
     #do something with data 

Nella mia domanda ho una lista che contiene diverse istanze di classe Foo. L'obiettivo è quello di eseguire do_task per tutti gli oggetti Foo. Una prima implementazione è semplice:

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

Vorrei sfruttare l'architettura multi-core condivisione del ciclo for tra 4 CPU della mia macchina.

Qual è il modo migliore per farlo?

+1

È possibile utilizzare il modulo di multiprocessing. https://docs.python.org/2/library/multiprocessing.html – NorthCat

+0

provare [qui] (http://stackoverflow.com/a/1182350/1982962) vi aiuterà a –

risposta

4

Invece di passare attraverso tutte le basi multithreading/multicore, vorrei fare riferimento a un messaggio da Ryan W. Smith: Multi-Core and Distributed Programming in Python

Egli andrà in dettaglio come è possibile utilizzare più core e utilizzare tali concetti. Ma per favore sii prudente con quella roba se non hai familiarità con i concetti generali del multithreading.

Functional Programming consente inoltre di personalizzare l'algoritmo/funzione per ogni core.

14

È possibile utilizzare process pools nel modulo di multiprocessing.

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 Questo è molto bello e veloce da implementare. –