2014-05-08 21 views
10

aşağıdaki gibi bir sınıf düşünün: Benim uygulamadaPython çok çekirdekli programlama

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

    def do_task(self): 
     #do something with data 

Foo sınıfının çeşitli örneklerini içeren bir liste var. Amaç tüm Foo nesneleri için do_task yürütmektir. Bir ilk uygulama basitçe:

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

benim makinenin 4 CPU'lar arasında for döngüsü paylaşımı çok çekirdekli mimarisinin yararlanmak istiyorum.

Bunu yapmanın en iyi yolu nedir? Bunun yerine tüm çoklu kullanım/çok çekirdekli temelleri geçiyor

+1

Çok işlemcili modül kullanabilirsiniz. https://docs.python.org/2/library/multiprocessing.html – NorthCat

+0

[burada] deneyin (http://stackoverflow.com/a/1182350/1982962) size yardımcı olacaktır –

cevap

4

, Ryan W. Smith tarafından bir Yayınla başvurmak istiyorum: O çoklu çekirdek nasıl kullanabileceği detaya gidip o kavramları kullanacak Multi-Core and Distributed Programming in Python

. Ancak, genel çoklu kullanım kavramlarına aşina değilseniz lütfen bu şeylere dikkat edin. Ayrıca, her çekirdek için algoritmayı/işlevi özelleştirmenizi de sağlar.

14

Çok işlemcili modülde process pools'u kullanabilirsiniz.

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 Bu çok uygulamak güzel ve hızlı. –