2011-12-28 40 views
0

我想在Python中实现多处理。至少我可能在列表中至少有500个元素。我有一个函数,列表中的每个元素都需要作为参数传递给它。然后,每个这个函数应该作为一个独立的进程执行,使用mutli处理或者启动一个新的解释器或者然后。以下是一些伪代码。多进程一个函数,其中列表元素作为参数

def fiction(arrayElement) 
     perform some operations here 

arrayList[] 

for eachElement in arrayList: 
     fiction(eachElement) 

我想多进程的作用下

为eachElement ArrayList中:

所以,我可以用我的箱子的多个内核。所有的帮助表示赞赏。

+0

首先查看[multiprocessing](http://docs.python.org/library/multiprocessing.html#module-multiprocessing)库... –

回答

4

multiprocessing模块包含各种基本类的,可以对此有所帮助:

from multiprocessing import Pool 
def f(x): 
    return x*x 

p = Pool(5) 
p.map(f, [1,2,3]) 

而且工作将在3个进程之间进行分配。

这是相当简单的,但你可以实现更多的使用外部包,主要是Message-oriented middleware

最主要的例子是ActiveMQ,RabbitMQZeroMQ

RabbitMQ结合了良好的python API和简单性。您可以看到here创建调度员 - 工作者模式有多简单,其中一个进程正在发送工作负载,其他进程会对其进行预处理。

ZeroMQ稍微低一点,但非常轻巧,不需要外部代理。

+0

感谢您的回答。你在哪里说'p.map(f,[1,2,3]))',我想传递一个列表的每个元素作为。我的列表看起来像这样'(('1',),('2',),('3',),('4',),('5',))'。这个列表是sql查询fetchAll()的结果。为了访问列表中的每个元素,我必须做一个foreach类型的循环。你能告诉我如何在每个循环下进行多重处理,或者更好的方式来访问列表中的所有元素并对其进行多处理。 – ash

+1

'map'函数只是在列表上发送迭代,并将每个项目发送到'f'(也就是元组''('1',)''将被发送到第一个进程,依此类推)。 如何执行你的多处理受到'f'工作的性质,以及你想要的工作本身分配的控制量。基于消息的系统规模更大**更好,但更难配置(代理),并且在编程时间(您需要了解API)和每条消息的延迟方面有一些开销。 – Ohad

+0

感谢它的工作。我的列表没有正确构建,并因此而抛出。你的建议帮了我很多。 – ash

相关问题