一次运行多个 exec 命令(但要等待最后一个命令完成)

2023-11-22

我环顾四周,似乎找不到任何人正在尝试做我想做的事情。

我有通过 _POST 请求传递到我的函数的信息。根据该数据,我运行 exec 命令来运行 TCL 脚本一定次数(使用不同的参数,基于 post 变量)。现在,我在 foreach 中有 exec,所以这需要永远运行(TCL 脚本需要 15 秒左右才能返回,所以如果我需要运行它 100 次,我就会遇到一些问题)。这是我的代码:

    public function executeAction(){
    //code to parse the _POST variable into an array called devices

    foreach($devices as $devID){
        exec("../path/to/script.tcl -parameter1 ".$device['param1']." -parameter2 ".$device['param2'], $execout[$devID]);
    }
    print_r($execout);
}

显然,这段代码只是删除了大块内容的摘录,但希望它足以演示我正在尝试做的事情。

我需要立即运行所有执行程序,并且需要等待它们全部完成后再返回。我还需要存储在名为 $execout 的数组中的所有脚本的输出。

有任何想法吗?

谢谢!!!


如果你把你的exec()调用单独的脚本,您可以使用并行多次调用该外部脚本curl_multi_exec()。这样,您就可以在单独的请求中进行所有调用,以便它们可以同时执行。轮询&$still_running查看所有请求何时完成,之后您可以收集每个请求的结果。

Update: Here's 一篇博文详细描述了我所描述的内容。


Example

根据上面链接的博客文章,我整理了以下示例。

并行运行的脚本:

// waitAndDate.php

<?php
sleep((int)$_GET['time']);
printf('%d secs; %s', $_GET['time'], shell_exec('date'));

并行调用的脚本:

// multiExec.php

<?php
$start = microtime(true);

$mh = curl_multi_init();
$handles = array();

// create several requests
for ($i = 0; $i < 5; $i++) {
    $ch = curl_init();

    $rand = rand(5,25); // just making up data to pass to script
    curl_setopt($ch, CURLOPT_URL, "http://domain/waitAndDate.php?time=$rand");
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_TIMEOUT, 30);

    curl_multi_add_handle($mh, $ch);
    $handles[] = $ch;
}

// execute requests and poll periodically until all have completed
$isRunning = null;
do {
    curl_multi_exec($mh, $isRunning);
    usleep(250000);
} while ($isRunning > 0);

// fetch output of each request
$outputs = array();
for ($i = 0; $i < count($handles); $i++) {
    $outputs[$i] = trim(curl_multi_getcontent($handles[$i]));
    curl_multi_remove_handle($mh, $handles[$i]);
}

curl_multi_close($mh);

print_r($outputs);
printf("Elapsed time: %.2f seconds\n", microtime(true) - $start);

这是我运行几次时收到的一些输出:

Array
(
    [0] => 8 secs; Mon Apr  2 19:01:33 UTC 2012
    [1] => 8 secs; Mon Apr  2 19:01:33 UTC 2012
    [2] => 18 secs; Mon Apr  2 19:01:43 UTC 2012
    [3] => 11 secs; Mon Apr  2 19:01:36 UTC 2012
    [4] => 8 secs; Mon Apr  2 19:01:33 UTC 2012
)
Elapsed time: 18.36 seconds

Array
(
    [0] => 22 secs; Mon Apr  2 19:02:33 UTC 2012
    [1] => 9 secs; Mon Apr  2 19:02:20 UTC 2012
    [2] => 8 secs; Mon Apr  2 19:02:19 UTC 2012
    [3] => 11 secs; Mon Apr  2 19:02:22 UTC 2012
    [4] => 7 secs; Mon Apr  2 19:02:18 UTC 2012
)
Elapsed time: 22.37 seconds

Array
(
    [0] => 5 secs; Mon Apr  2 19:02:40 UTC 2012
    [1] => 18 secs; Mon Apr  2 19:02:53 UTC 2012
    [2] => 7 secs; Mon Apr  2 19:02:42 UTC 2012
    [3] => 9 secs; Mon Apr  2 19:02:44 UTC 2012
    [4] => 9 secs; Mon Apr  2 19:02:44 UTC 2012
)
Elapsed time: 18.35 seconds

希望有帮助!

附注:确保您的 Web 服务器可以处理这么多并行请求。如果它按顺序为它们提供服务,或者只能同时为很少的几个服务提供服务,那么这种方法对您的好处很小,甚至没有任何好处。 :-)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

一次运行多个 exec 命令(但要等待最后一个命令完成) 的相关文章

  • SetInterval 函数不适用于 PHP 文件

    我有这样的index html
  • 内连接 3 个表

    我正在使用 PHP 和 PDO 我需要重新收集连接 3 个表的信息 photos albums 相册照片 该表具有以下结构 photos photo id int path varchar nick varchar date timesta
  • PHP 异常处理与 C#

    这是一个非常基本的问题 我希望如此 我所做的大部分异常处理都是使用 C 进行的 在 C 中 任何在 try catch 块中出错的代码都会由 catch 代码处理 例如 try int divByZero 45 0 catch Except
  • Codeigniter PHP - 在锚点加载视图

    我在一个长页面的底部有一个表单 如果用户填写了表单但它不验证页面是否以典型的 codeigniter 方式重新加载 this gt load gt view template data 然而 由于表单位于页面底部 我需要将页面加载到那里 就
  • 带有管理等待的 Gui 可重入

    我在使用 NotifyIcons 时发现了重入问题 重现起来非常简单 只需将 NotiftIcon 放在表单上 单击事件应如下所示 private bool reentrancyDetected private void notifyIco
  • 将 PHP 中的 openssl AES 转换为 Python AES

    我有一个 php 文件 如下所示 encryption encoded key c7e1wJFz PBwQix80D1MbIwwOmOceZOzFGoidzDkF5g function my encrypt data key encrypt
  • 使用 PHP 更新 XML 节点

    我有一个 XML 文件 test xml
  • 优雅地退出 Laravel 作用域

    我有一个范围 它根据用户角色以限制方式起作用 您可以将一组规则转发到限制数据库最终输出的范围 一个非常简化的角色限制示例 first name foo 只会返回其记录first name开始于foo 这实际上意味着我已禁止具有该角色的用户查
  • 从直方图计算平均值和百分位数?

    我编写了一个计时器 可以测量任何多线程应用程序中特定代码的性能 在下面的计时器中 它还会在地图中填充花费了 x 毫秒的调用次数 我将使用这张图作为我的直方图的一部分来进行进一步的分析 例如调用花费了这么多毫秒的百分比等等 public st
  • 当路由不存在时重定向 laravel 4

    我正在使用 laravel 4 当我的项目处于生产模式时 我得到 抱歉 找不到您要查找的页面 当我到达一条不存在的路线时 当我 grep 我的代码时 它在两个地方找到 vendor symfony debug Symfony Compone
  • 将 Cloudinary 与 spatie/media-library Laravel 包一起使用

    有人使用 Laravel 包 spatie media library 和 Cloudinary 吗 我认为用 Flysystem 来实现它是微不足道的 我实际上使用 Cloudinary 作为带有 silvanite nova field
  • 彩色 var_dump() 和错误

    我怎样才能将样式设置为var dump 功能和PHP错误样式 如下图所示 目前我有下一个观点var dump with pre var dump pre 没有它将全部在一行中 并且只是纯文本的错误 我搜索了一些 PHP 颜色错误 var d
  • PHP 中的异或加密

    我是 Xor 加密的新手 并且在使用以下代码时遇到了一些问题 function xor this string Let s define our key here key magic key Our plaintext ciphertext
  • 将 echo 和 print 合并到一个语句中

    echo 1 print 2 3 返回 214 脚本如何以 14 结尾 当你这样做时 echo 1 print 2 3 PHP 会做 demo http codepad viper 7 com OfrNrs line op fetch ex
  • 2 使用我的代码在数组中查询

    我使用滑块来显示我的 WordPress 精选文章 它选择一个自定义类别并返回一定数量的帖子 如何将显示的第一篇帖子设为自定义帖子 我可以直接在滑块代码中添加特定帖子的 ID吗使该帖子首先出现 然后是原始查询返回的其他内容 例如 在页面上
  • 什么是竞争条件?

    编写多线程应用程序时 最常见的问题之一是竞争条件 我向社区提出的问题是 竞赛条件是什么 你如何检测它们 你如何处理它们 最后 如何防止它们发生 当两个或多个线程可以访问共享数据并且它们试图同时更改它时 就会出现竞争条件 由于线程调度算法可以
  • PHP-如何根据条件配对数组中的项目

    如何将数组中的项目配对 假设我有一个数组Fighters 我想根据他们的情况将他们配对Weights 体重最接近的拳手应作为配对最佳匹配 但如果他们是在同一个团队中 他们不应该配对 团队 1 战斗机A体重为60 战斗机B体重为65 2队 战
  • 使用 Xpath 进行部分匹配

    我正在尝试创建一个搜索功能 允许使用 Xpath 按歌曲标题或流派进行部分匹配 这是我的 XML 文件
  • 管理产品页面自定义字段显示在购物车和结账中

    我在产品页面的常规设置选项卡上的 WooCommerce 管理中创建了一个自定义字段 以插入几天的制造时间 我想在购物车和结帐页面上每个产品名称上方显示此自定义字段值 这是我的代码 Insert a Custom Admin Field f
  • 使用 Swift 邮件程序发送邮件时出现错误 501

随机推荐

  • 如何裁剪 Keras 中图层返回的值?

    如何剪辑返回的值Lambda layer 我尝试使用这个 from keras backend tensorflow backend import clip from keras layers core import Lambda mode
  • @font-face 被 IE7 忽略

    我创建了一个 font face css规则和所有使用的字体格式松鼠字体在我迄今为止测试过的所有浏览器上都可以正常工作 但在 IE7 上不行 字体似乎根本没有加载 您可以在以下位置实时查看该网站 http grupogamma social
  • 将程序集安装到 GAC 中

    我尝试使用以下命令在 GAC 中安装程序集new System EnterpriseServices Internal Publish GACInstall Foo dll 但我找不到安装在 c windows assembly gac m
  • 使用我的 Android 应用程序将文本标签发送到 Instagram

    我的应用程序拍摄照片并将其发送到 Instagram Facebook 和 Twitter 但我需要在 Instagram 上分享带有图片的文本 myappname 这是我用来发送照片的代码 Intent shareIntent new I
  • 渲染 @object 和 locals 与 render :partial

    我想传递一个局部变量 其中包含特定页面上的原点 该变量仅包含带有值的符号 当我使用这段代码时 它工作得很好 可以在部分中访问 origin 变量 render partial gt products collection gt produc
  • 如何在 Node 4.x 中使用 Promise?

    既然 ES6 在 Node 4 x 中正式成为标准 那么如何使用 Promises 呢 做模块 例如本机fs模块 自动与 Promise 一起工作 或者必须专门编写模块才能与 Promise 一起使用 你怎么知道 Promise 可以用于什
  • 三种颜色的三角形

    我正在尝试为这个问题编写代码 来源 https www codewars com kata insane coloured triangles train c 彩色三角形是由一行颜色创建的 每种颜色都是 红色 绿色或蓝色 连续行 每行少一种
  • C++11:std::locale::empty() 是一件事吗?

    尝试编译一些代码来自 StackOverflow 基本上是这些行 std wifstream wif filename wif imbue std locale std locale empty new std codecvt utf8
  • 为什么我不能在单个服务器请求中插入带有外键的记录?

    我正在尝试使用外键进行简单的插入 但似乎我需要使用db SaveChanges 对于每条记录插入 我怎样才能只使用一个db SaveChanges 在这个程序的最后 public static void Test using var ent
  • 多次导航至同一实体

    当有 2 个导航时 我遇到两个实体之间的连接问题 具体来说 我有以下课程 public class TableA public TableA ListBs new List
  • Zend Framework 2:在视图中获取匹配的路由

    我目前正在通过开发一个大致基于骨架应用程序的小型 MVC 应用程序来学习 ZF2 现在我正在尝试根据匹配的路由隐藏一些固定的 HTML 元素 仅作为示例 我不希望在登录阶段显示主菜单 我可以通过将切换参数作为控制器操作的返回值传递来轻松做到
  • 如何在polymer中设置动态Meta标签和Open Graph标签?

    我有一个聚合物节点站点 我一直在研究它 但不知道如何包含动态元标记和开放图标记 Jquery 无法工作 也无法使用polymer api 添加节点 因为它会在页面加载后添加所有标签 而 facebook 将无法读取这些标签 谷歌爬虫确实会渲
  • 如何在 Pygame 中根据角度移动精灵

    我在移动精灵时遇到问题 我可以毫无问题地在 x 轴和 y 轴上移动它们 我不知道如何才能按照某个角度移动它们 我的意思是 我正在尝试创建一个函数 其中包括我尝试移动的对象 其速度和方向 应以度为单位测量 就像是 MovingObject o
  • 在使用 Ant 编译的文件中找不到主类

    我在 Eclipse 中编译并运行我的程序 一切正常 但是当我用 Ant 打包它并运行它时 出现以下错误 Exception in thread main java lang NoClassDefFoundError org supercs
  • VS 2010 鼠标处理器扩展 - 不工作

    我正在尝试 Visual Studio 2010 扩展 其中我需要处理 IMouseProcessor 公开的事件 据我从文档中可以看出 我应该创建一个 IMouseProcessorProvider 并使用 MEF 导出 以便 Visua
  • 在 .NET 中比较 2 个 XML 文档的最佳方法[重复]

    这个问题在这里已经有答案了 我有一堆单元测试需要检查 XML 输出 我已经开始比较字符串 但是由于格式和表面差异的阻碍 这不会扩展 NET 中评估生成的 XML 在语义上是否与测试期望的相同的最简单方法是什么 Closed作为重复您将如何比
  • SQL“IN”语句的 Linq 版本

    我有以下 3 个表作为简单 项目标记 模式的一部分 物品 项目 ID 整数 品牌varchar 名称 varchar 价格钱 条件varchar 说明 varchar 有效位 Tags 标签 ID 整数 名称 varchar 有效位 标签映
  • 根据数据设置 Dojox 网格行的样式

    我正在尝试根据网格中的值在 DojoX 1 2 3 网格内设置行的样式 网格布局 var view1 noscroll true rows field TASK ID name ID width 80px get this getColor
  • SQL Server 性能 结果集 vs 输出参数 vs 返回值

    我正在权衡使用三种不同方法之一将单个标量值从存储过程返回到我的 C 例程的潜在性能影响 谁能告诉我其中哪个 更快 最重要的是 为什么 方法一 CREATE PROCEDURE GetClientId DealerCode varchar 1
  • 一次运行多个 exec 命令(但要等待最后一个命令完成)

    我环顾四周 似乎找不到任何人正在尝试做我想做的事情 我有通过 POST 请求传递到我的函数的信息 根据该数据 我运行 exec 命令来运行 TCL 脚本一定次数 使用不同的参数 基于 post 变量 现在 我在 foreach 中有 exe