我想知道我是否可以通过网格/集群上的多处理包而不是在同一本地机器上执行/运行python函数。它将帮助我创建100个必须使用相同功能的作业,并通过DRMAA将它们分发到我们的本地集群。我不确定这对子进程/分叉是否可行或有意义。
任何示例或建议都会有所帮助。
PS:cross发布在python-list
上谢谢! -Abhi
答案 0 :(得分:1)
通常我们会使用像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()
答案 1 :(得分:0)
multiprocessing
模块主要是在本地计算机上运行。例外是remote managers。
使用远程管理器的优点是除了标准的python安装之外你不需要任何额外的东西。但是你必须处理诸如将客户端代码分发给所有机器等问题。当然所有机器都需要安装python。
在群集等上运行有许多不同的选项。请参阅Python wiki上的parallel processing页面。
答案 2 :(得分:0)
Parallel Python可能就是您所需要的。
答案 3 :(得分:0)
另一个可能的选项是iPython。他们有一个很好的并行处理教程。