多进程:将Python函数分配到集群进行处理。

3
我想知道是否可以通过multiprocessing包在网格/集群上执行运行Python函数,而不是在同一台本地计算机上。这将帮助我创建数百个作业,它们需要使用相同的函数,并通过DRMAA将它们分配给我们的本地集群。我不确定是否可以使用子进程/分支来实现此目标,或者这样做是否有意义。
如果你有任何例子或建议,那将非常有帮助。
PS:也在python-list上发布了此问题。
谢谢!- Abhi

当我尝试做这样的事情时,最终我使用了SubProcess和ssh。虽然不是一个很好的解决方案,但在远程机器上进行分叉并不是很明智。 - Michael
这个页面怎么样:http://wiki.python.org/moin/ParallelProcessing - RickyA
@RickyA:好链接。由于那里有很多软件包,听一些人们使用过的案例会很不错。-Abhi - Abhi
使用celery怎么样?http://celeryproject.org/ - arifwn
抱歉,我对它们都没有工作知识。不过我听说过celery... - RickyA
@Arifwn:之前没有听说过celery,但听起来很有趣...有一件事我不确定的是,celery能否与本地集群交互,通过SGE/UGE这样的调度程序来分配任务。 - Abhi
4个回答

2

通常我们使用类似MPI这样的东西。

需要一个仲裁者,其唯一工作是将任务分配给节点并检查节点的活动状态。(池)每个脚本应该都是相同的,并包含您需要的所有代码,并分发到所有节点。

一旦设置好了,维护一个任务和参数(方法名+参数)队列,让每个节点完成任务并将结果排队返回给仲裁者。

一个简单的例子:

def do_something(arg1, arg2):
  return arg1 + arg2

def get_next_task():
  task, args = server.retrieve_task()
  result = task(args)
  server.queue_result(result, node_id)

if __name__ == '__main__':
  if sys.argv[1] == '-a': # arbiter
    arbiter()
  if sys.argv[1] == '-n': # node
    run_node()

0

multiprocessing 模块在本地机器上“大多数情况下”都可以工作。例外情况是 远程管理器

使用远程管理器的优点是除了标准的 Python 安装之外,您不需要任何额外的东西。但是您必须处理分发客户端代码到所有计算机等问题。当然,所有计算机都需要安装 Python。

有许多不同的选项可用于在集群等环境中运行。请参见 Python 维基上的 并行处理 页面。


我不认为这是“严格”的真相:http://docs.python.org/2/library/multiprocessing.html?highlight=multiprocessing#using-a-remote-manager -但这并不是“multiprocessing”真正关注的内容。 - TimStaley

0

0
另一个可能的选择是iPython。他们有一个不错的并行处理教程。

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