【问题标题】:Waiting on many parallel shell commands with Perl使用 Perl 等待许多并行 shell 命令
【发布时间】:2013-11-02 05:03:12
【问题描述】:

简洁的问题解释:

我希望能够运行多个(我们会说几百个)shell 命令,每个命令都会启动一个长时间运行的进程并阻塞几个小时或几天,最多只有一两行输出(这个命令只是向集群提交作业)。这种阻塞很有帮助,因此我可以确切地知道每个结果何时完成,因为我想调查每个结果,并且可能会重新运行多次以防它们失败。我的程序将充当这些程序的一种控制器。

for all commands in parallel {
    submit_job_and_wait()
    tries = 1
    while ! job_was_successful and tries < 3{
        resubmit_with_extra_memory_and_wait()
        tries++
    }
}

我尝试过/调查过的内容:

到目前为止,我一直认为最好为每个提交创建一个线程,该线程只是阻塞等待输入。对于相当多的等待线程有足够的内存。但据我所读,perl 线程比其他语言更接近重复进程,因此创建数百个线程是不可行的(感觉也不对)。

似乎还有各种类似事件循环的协作系统,例如AnyEventCoro,但这些似乎需要您依赖异步库,否则您实际上无法同时执行任何操作。我不知道如何用它制作多个 shell 命令。我试过使用AnyEvent::Util::run_cmd,但是在我提交多个命令后,我必须指定我要等待它们的顺序。我事先不知道每次提交需要多长时间,所以我不能recv 有时会很不走运。这不是真正的平行。

my $cv1 = run_cmd("qsub -sync y 'sleep $RANDOM'");
my $cv2 = run_cmd("qsub -sync y 'sleep $RANDOM'");

# Now should I $cv1->recv first or $cv2->recv? Who knows!
# Out of 100 submissions, I may have to wait on the longest one before processing any.

我对AnyEvent和朋友的理解可能有误,如有错误请指正。 :)

另一种选择是以非阻塞形式运行作业提交并将其完成传达回我的进程,但在不同机器之间完成和协调此任务所需的进程间通信让我有点畏惧。我希望在求助之前找到本地解决方案。

有没有我忽略的解决方案?

【问题讨论】:

  • 你有什么反对分叉的?几百个“不可行”是什么?您是在嵌入式系统上运行还是在类似的系统上运行?
  • 我对@9​​87654328@也没有任何了解,但你不应该只使用$cv-&gt;cb(sub { ... })而不是$cv-&gt;recv吗?
  • @RichardHuxton:嗯,50788 kB / perl 进程(例如加载 Moose)* 200 个进程使我超过 9 GB,所以我希望避免请求一个大内存节点来控制其他工作。除非我误解了记忆行为?
  • 是的——如果你 fork 一个 50MB 的进程,它会共享几乎所有这些,并且只有在你写入子进程时才会分配更多。试试metacpan.org/pod/Parallel::ForkManager,看看你的进展如何。
  • 好的,谢谢@RichardHuxton!我试试看。

标签: multithreading perl shell cluster-computing


【解决方案1】:

您可以使用诸如fireworkspegasus 之类的Scientific Workflow 软件,这些软件旨在帮助科学家将大量计算工作提交到共享或专用资源。但是它们还可以做更多的事情,因此对于您的问题来说可能有点过头了,但它们仍然值得一看。

如果您的目标是尝试为您的作业找到最严格的内存要求,您也可以简单地提交具有大量或请求内存的作业,然后从会计 (qacct) 中提取实际内存使用情况,或者,在集群策略允许的情况下,登录您的作业正在运行的计算节点并使用topps 查看内存使用情况。

【讨论】:

  • 是的,这些看起来有点重,但谢谢你的建议。我想我现在倾向于只使用消息传递库并将其转变为“分布式应用程序”。
猜你喜欢
  • 2021-02-03
  • 2013-04-03
  • 2012-10-16
  • 2011-09-20
  • 2023-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-05
相关资源
最近更新 更多