Python多核编程

13

请考虑以下类:

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

    def do_task(self):
        #do something with data 

在我的应用程序中,有一个包含几个Foo类实例的列表。目标是对所有Foo对象执行do_task。第一种实现方法很简单:

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

我想利用多核架构共享我的机器上4个CPU之间的for循环。

最好的方法是什么?


1
你可以使用multiprocessing模块。https://docs.python.org/2/library/multiprocessing.html - NorthCat
尝试使用这个链接,它将对你有所帮助。 - Kobi K
2个回答

22

你可以在multiprocessing模块中使用进程池

def work(foo):
    foo.do_task()

from multiprocessing import Pool

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

+1 这非常好,而且实现速度很快。 - Kobi K
我该如何等待所有进程都完成? - Flash Thunder
2
@FlashThunder 当 pool.join() 返回时,所有的进程都已经完成。 - timrau

12

不必详细介绍多线程/多核基础概念,我想引用Ryan W. Smith的帖子:Python中的多核和分布式编程

他将详细介绍如何利用多个内核并使用这些概念。但是如果您不熟悉一般的多线程概念,请小心使用。

函数式编程也可以让您为每个内核自定义算法/函数。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接