3

我想知道我是否可以通过网格/集群上的多处理包而不是在同一台本地机器上执行/运行 python 函数。它将帮助我创建 100 个必须使用相同功能的工作,并通过 DRMAA 将它们分流到我们的本地集群。我不确定这对于子进程/分叉是否可行或有意义。

任何示例或建议都会有所帮助。

PS:交叉张贴在python-list上

谢谢!-阿比

4

4 回答 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()
于 2012-05-17T19:45:30.803 回答
0

另一种可能的选择是iPython。他们有一个很好的并行处理教程。

于 2012-05-21T03:02:56.197 回答
0

multiprocessing模块主要在本地机器上工作。远程管理器是个例外。

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

在集群等上运行有许多不同的选项。请参阅 Python wiki 上的并行处理页面。

于 2012-05-17T23:09:33.750 回答
0

并行 Python可能是您所需要的。

于 2012-05-18T16:32:43.647 回答