PHP 中的函数超时

2024-04-05

有没有办法让函数超时?我有 10 分钟的时间来完成一项工作。该作业包含一个 for 循环,下面是一个示例:

<?php
foreach($arr as $key => $value){
   some_function($key, $value); //This function does SSH and SFTP stuff
}
?>

$arr 有 15 个元素,some_function() 有时可能需要 1 分钟以上。事实上,有一次它被挂了5分钟。

有没有办法让函数调用超时并继续处理 $arr 中的下一个元素?

谢谢你!!


这取决于您的实施。 PHP 中 99% 的函数都是阻塞的。这意味着在当前函数完成之前处理不会继续。但是,如果函数包含循环,您可以添加自己的代码以在满足特定条件后中断循环。

像这样的事情:

foreach ($array as $value) {
  perform_task($value);
}

function perform_task($value) {
  $start_time = time();

  while(true) {
    if ((time() - $start_time) > 300) {
      return false; // timeout, function took longer than 300 seconds
    }
    // Other processing
  }
}

另一个不可能中断处理的示例:

foreach ($array as $value) {
  perform_task($value);
}

function perform_task($value) {
    // preg_replace is a blocking function
    // There's no way to break out of it after a certain amount of time.
    return preg_replace('/pattern/', 'replace', $value);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PHP 中的函数超时 的相关文章

随机推荐

  • Spring Kafka中检测broker断开连接

    我正在尝试为我的卡夫卡消费者编写健康检查 当应用程序启动并运行时 我关闭 Kafka 我看到很多 Connection to node 1001 127 0 0 1 9092 could not be established Broker
  • 使用 GNU Parallel 和 Split

    我正在将一个相当大的文件加载到 postgresql 数据库中 为此 我首先使用split在文件中获取较小的文件 每个 30Gb 然后我使用以下命令将每个较小的文件加载到数据库中GNU Parallel and psql copy 问题是大
  • ImportError:Linux 上没有名为“cplex”Python 的模块

    我正在尝试在 HPC 机器 RedHatEntrepriseServer 上运行 python 脚本 管理员已经安装了 CPLEX 模块 但在 python 中导入 cplex 模块时仍然出现此错误 ImportError No modul
  • 选择下拉列表项 findbytext 不区分大小写 vb.net

    我想在用 VB NET 编写的 ASP NET 的下拉列表中选择一项 我在列表框中有这样的值和文本 Volvo Audi etc 但来自其他地方的大写值 VOLVO AUDI 这段代码 dropdownlist FindByValue CA
  • 是否可以从 SQL 查询执行文本文件?

    我有许多生成的 sql 文件 我想连续运行 我想从查询中的 SQL 语句 即查询分析器 Server Management Studio 运行它们 是否可以做这样的事情 如果可以的话 这样做的语法是什么 我希望有这样的事情 exec c t
  • boost::condition::timed_wait 的使用示例

    有人有如何最轻松地使用 boost condition timed wait 的示例吗 有一些关于该主题的主题here https stackoverflow com questions 2259025 how do i get boost
  • Python请求不上传文件

    我正在尝试使用 Python 请求重现此curl 命令 curl X POST H Content Type application gpx xml H Accept application json data binary test gp
  • 将目录树表示为递归列表

    我被某项任务困住了 我想要的是一个函数 给定目录路径 它将返回递归列表作为输出 输出的格式应为 myList dir subdir subdir fullFilePath 所以基本上我想将目录树表示为某个列表 我获取了所有文件 获取了每个文
  • 使用 Cocoa 确定两个日期之间的月数

    如何使用 Cocoa 计算两个日期之间的月数 谢谢 斯坦 NSInteger month NSCalendar currentCalendar components NSCalendarUnitMonth fromDate yourFirs
  • 如何为 MVC .Net Core 应用程序创建单个管理员用户

    我正在构建一个本质上是商店的网络应用程序 但我想为网站管理员提供一种简单的方法来添加新产品 但是我想限制网站的这一部分 以便只有管理员可以访问它 目前我对其他用户没有用处 我该如何做到这一点 以便任何拥有管理员用户名和密码的人都可以访问这些
  • ssl:身份验证方法 ssl 需要密码

    在尝试通过 Ansible 连接到 Windows 虚拟机时 我遇到了以下问题 TASK setup lt 10 xx xx xx gt ESTABLISH WINRM CONNECTION FOR USER winad admin on
  • 控制器文件已加载,但类不存在

    我在 Magento 中遇到此错误时遇到问题 控制器文件已加载 但类不存在 完整堆栈位于底部 我本质上是想遵循本教程 在 Magento 中创建新模块 HelloWorld http magento4u wordpress com 2009
  • 使用 DllImport 在 C# 中调用 OpenGL 函数?

    我目前正在为 OpenGL 开发一个 C 实用程序库 对于跨平台窗口管理 我使用 GLFW 并使用 DllImport 成功加载了 glfwCreateWindow 或 glfwMakeContextCurrent 等函数 现在我想使用 O
  • CentOS 和 Ubuntu 上的“常规文件”是什么?

    我的环境是 CentOS 6 9 Ubuntu 16 04 LTS GNU coreutils 8 4 有 test 命令来检查文件 f option man test shows f FILE FILE exists and is a r
  • 二叉树的 Herbrand 宇宙、Herbrand 基础和 Herbrand 模型(序言)

    什么是二叉树的 Herbrand 宇宙 Herbrand Base 和 Herbrand Model binary tree empty binary tree tree Left Element Right binary tree Lef
  • 你能在 Mongo 中为 $addToSet 指定一个键吗?

    我有一个文件 profile set name nick options 0 name joe options 2 name burt options 1 并想添加一个新文档到profile set如果名称尚不存在则设置 无论选项如何 所以
  • SubmissionPublisher 提交时不调用订阅者的 onNext

    每个时间间隔我都会通过特定的查询检索推文 这些推文必须传递给计算和操作这些推文的服务 所以这些服务都是向我的发布者订阅的 所以publisher hasSubscribers 返回true 但是提交或提供函数不会调用我的订阅者的 onNex
  • 快速清除 JSON 缓存?

    我正在处理一些经常更新的 API 数据 我最近发现 当数据在服务器上更新时 数据在手机上无法正确更新 经过几个小时的尝试解决此问题后 我终于尝试从手机中删除该应用程序 然后重新安装 它成功了 经过进一步测试 我发现它打印出旧的 JSON 一
  • 将参数传递给 h:outputtext 标记中的方法

    我想通过将属性传递给在支持 bean 中实现的方法来在 jsf 屏幕中显示文本 我必须将动态值作为属性传递 我尝试了下面的内容 但它似乎是一个不正确的语法
  • PHP 中的函数超时

    有没有办法让函数超时 我有 10 分钟的时间来完成一项工作 该作业包含一个 for 循环 下面是一个示例 arr 有 15 个元素 some function 有时可能需要 1 分钟以上 事实上 有一次它被挂了5分钟 有没有办法让函数调用超