Python 多核编程
请考虑下面这个类:
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()
我想利用我机器上的多核架构,把for
循环的工作分配到4个CPU上。
有什么好的方法可以做到这一点呢?
2 个回答
12
与其逐个讲解多线程和多核的基础知识,不如推荐一篇Ryan W. Smith的文章:Python中的多核和分布式编程
他会详细介绍如何利用多个核心以及如何使用这些概念。不过,如果你对多线程的一般概念不太熟悉,使用这些内容时要小心。
函数式编程也可以让你为每个核心定制算法或函数。
22
你可以在多进程模块中使用 进程池。
def work(foo):
foo.do_task()
from multiprocessing import Pool
pool = Pool()
pool.map(work, my_foo_obj_list)
pool.close()
pool.join()