【问题标题】:Executing several commands at once [closed]一次执行多个命令[关闭]
【发布时间】:2016-11-10 21:25:59
【问题描述】:

我正在尝试用 Perl 编写一些东西(但我也很高兴使用 Python 或 PHP 来做同样的事情):

  • 获取一个列表(例如,文件或 URL)

  • 添加额外的系统命令(例如cp

  • 在列表中最多执行十个这样的命令,比如说总共一千个

  • 等待十个槽之一变为并开始一个新过程,从而在 1000 个元素中移动。

我现在正在走捷径,并使用反引号在 Perl 中执行命令,但如果有更好的方法来实现这一点,我将不胜感激。

【问题讨论】:

  • 如果问题是您当前所做的是否是好的做法,那么您的代码的最小示例会有所帮助。如果您的问题是如何用另一种语言做您已经在做的事情,那么您的代码的最小示例会有所帮助。总体而言,实际问题和代码的最小示例会有所帮助。
  • 您必须展示您所写的内容,否则我们无法知道什么是“更好的方式”。你应该看看Parallel::ForkManager

标签: php python linux perl


【解决方案1】:

你应该展示你写的东西,否则我们无法知道什么是“更好的方法”

你应该看看Parallel::ForkManager。使用该模块,您的程序可能看起来像这样

这段代码缺少很多东西,最重要的是use strictuse warnings 'all',以及@list 的声明和填充。我相信你可以填空

注意,十个并行进程的限制是模块强加的,并且"..."必须自己填写为目标路径。最好在 Perl 中做你需要做的事情,而不是仅仅打电话给cp,所以我参与了File::Copy

use Parallel::ForkManager ();
use File::Copy 'copy';

my $pm = Parallel::ForkManager->new(10);

for my $file ( @list ) {

    next if my $pid = $pm->start;

    # Child code

    copy $file, "...";
    $pm->finish;
}

【讨论】:

  • 谢谢 Perl Dog,这正是我所寻求的。为了回应以前的帖子 - 道歉,我有两种语言的大约五种变体,并且觉得最好把我试图做的副乱码代码的概念放下:) 道歉,下次会遵守规则!再次感谢大家抽出时间回复。
猜你喜欢
  • 1970-01-01
  • 2017-05-01
  • 2012-08-31
  • 2011-01-21
  • 1970-01-01
  • 1970-01-01
  • 2013-07-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多