如何处理 pcntl_fork(): 错误 35?

2024-04-27

我有 php7 CLI 守护进程,它连续解析文件大小超过 50M 的 json。我试图使用 pcntl_fork() 的单独进程将每 1000 个解析数据条目保存到 mysql,对于约 200k 行,它工作得很好。

然后我得到pcntl_fork(): 错误 35.

我认为发生这种情况是因为 mysql 插入变得比解析慢,这导致生成越来越多的分叉,直到 CentOS 6.3 无法再处理它。

有没有办法捕获此错误以诉诸单进程解析和保存?或者有没有办法检查子进程计数?


这是我根据@Sander Visser 评论所做的解决方案。关键部分是检查现有流程,如果流程太多,则采用相同的流程

class serialJsonReader{

const MAX_CHILD_PROCESSES = 50;
private $child_processes=[]; //will store alive child PIDs

private function flushCachedDataToStore() {

//resort to single process
    if (count($this->child_processes) > self::MAX_CHILD_PROCESSES) {
        $this->checkChildProcesses();

        $this->storeCollectedData() //main work here
    }

//use as much as possible
    else {
        $pid = pcntl_fork();
        if (!$pid) {
            $this->storeCollectedData(); //main work here
            exit();
        }
        elseif ($pid == -1) {
            die('could not fork');
        }
        else {
            $this->child_processes[] = $pid;
            $this->checkChildProcesses();
        }
    }
}

private function checkChildProcesses() {
    if (count($this->child_processes) > self::MAX_CHILD_PROCESSES) {
        foreach ($this->child_processes as $key => $pid) {
            $res = pcntl_waitpid($pid, $status, WNOHANG);

            // If the process has already exited
            if ($res == -1 || $res > 0) {
                unset($this->child_processes[$key]);
            }
        }
    }
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何处理 pcntl_fork(): 错误 35? 的相关文章

随机推荐

  • 如何在 spring 中将模型作为重定向属性传递

    redirectModel addAttribute Model model return REDIRECT PREFIX my company organization management manage users 当我通过这个时 我得
  • 带权重的欧几里得距离

    我目前正在使用SciPy计算欧氏距离 dis scipy spatial distance euclidean A B 在哪里 A B是5维位向量 现在工作正常 但是如果我为每个维度添加权重 是否仍然可以使用 scipy 我现在拥有的 sq
  • Django i18n 和 python 语言环境(和日期)

    我一直在使用 Django 的 i18n 系统 它似乎大部分工作正常 然而 模型代码中的日期似乎引起了问题 我使用 datetime strftime 填充一些 CHOICES 元组 然后在表单中使用它们 据我了解 django 会将语言环
  • 如何在navigationStart路由器事件中暂停路线更改

    在我的应用程序中 我有从包 节点模块 公开的路由 因此 我无法将 canActivate 或 canDeactivate 用于节点模块内定义的路由 因此 我开始订阅应用程序组件中的所有路线更改 并根据条件将用户重定向到不同的路线 由于条件有
  • PEX协议(磁力链接)如何找到它的第一个IP?

    我试图了解磁力链接如何工作 因为我读过他们使用 DHT 和 PEX 来获取对等点 但如果我是网络中的新节点 如何才能找到仅具有哈希值的对等点文件 它不是总是需要一个到已知主机的链接吗 Thanks Bittorrent DHT 可以通过多种
  • 如何阻止 Apache CXF 发送响应消息?

    如果给定的 SOAP 标头元素具有给定值 例如 如果标头标记 response 的值为 0 我根本不希望 Apache CXF 返回响应 我怎样才能做到这一点 CXF 似乎假设所有呼叫都会收到响应 我知道这在 Web 服务上下文中看起来很奇
  • 如何在生产环境中运行 spring boot 可执行 jar?

    Spring Boot 的首选部署方法是通过内部包含 tomcat 的可执行 jar 文件 它是从一个简单的开始java jar myapp jar 现在 我想将该 jar 部署到 EC2 上的 Linux 服务器上 我是否遗漏了某些内容
  • 如何在 Bullet 物理引擎中对物体应用旋转?

    我有旋转值 滚动 俯仰 偏航 我想将这种旋转应用于身体 但我不知道该怎么做 最直接的方法是通过运动状态或直接设置来直接设置刚体的世界变换 要获得横滚 俯仰和偏航的变换 您可以使用 btRigidBody rigidBody btTransf
  • 检查变量是否为 double 数据类型

    我需要检查我拥有的变量是否属于该数据类型double 这是我尝试过的 try double price Convert ToDouble txtPrice Text catch FormatException MessageBox Show
  • cs0030:无法生成临时类

    我有一个 Web 服务 当我尝试生成它的对象时 出现以下错误 无法生成临时类 结果 1 错误 CS0030 无法将类型 ShortSell ShortSellRQOriginDestinationInformationFlightSegme
  • 消息通知产生“此内容无法显示”

    我正在通过网络挂钩向 Slack 发送消息 使用单个 文本 JSON 元素的消息通知可通过适用于 OS X 和 iOS 的 Slack 应用程序生成正确的通知文本 频道中的消息文本也是正确的 但是 当使用新的 阻止 方法时 通知文本变为 无
  • 发布时错误元数据文件dll无法找到CSC

    我有一个 Visual Studio 解决方案 其中包含多个项目 特别是 DotNet5 asp net 应用程序 其中有多个 netstandard 2 0 引用 它在调试器中构建并运行良好 但不断抛出元数据错误 它不断特别引用在 net
  • 谷歌分析 SDK iOS10

    我已经从 cocoa pod 版本 3 14 安装了 Google Analytics id
  • 如何在Spring boot中使用注释来使用参数解析器?

    我想用argument resolvers在 Spring 启动中 我该怎么办 它是在 XML 中完成的 如下所示
  • 快速移动的球与鼠标控制的球拍的碰撞检测问题

    在统一中 我有一个应该击球的球拍 并且球拍直接由鼠标控制 即鼠标使用鼠标轴移动球棒并使用 translate 函数移动球拍 我预计 Unity3d 的物理特性不会直接通过鼠标正确地转换球拍的运动并相应地影响球 我必须编写一些自定义的内容 结
  • 为什么负边距会影响我的页面宽度?

    请参考以下内容example http jsfiddle net wdm954 Fcznp 9 其中 200px 宽的外部 div 旨在确定我们的页面宽度 它包含一个 400px 宽的内部 div 但左 右负边距为 100px 我预期的最终
  • C++ / C++11 中的函数组合

    我目前正在使用 C 11 编写一些需要大量函数组合的密码算法 我必须处理两种类型的构图 自行编写一个函数 次数可变 数学上 对于某个函数 F F n x F n 1 o F x F n 1 F x 将不同的函数组合在一起 例如 对于某些相同
  • Jackson @JsonRawValue 获取地图的值

    我有以下 Java bean 类 使用 Jackson 将其转换为 JSON public class Thing public String name JsonRawValue public Map content new HashMap
  • 将 asp.net 5 测试放在单独的程序集中

    我使用 Microsoft AspNet TestHost 来托管 xunit 集成测试 只要测试与 asp net 5 solution 位于同一项目中 一切都会正常进行 但我想将测试放入单独的程序集中 将它们与解决方案分开 但是 当我尝
  • 如何处理 pcntl_fork(): 错误 35?

    我有 php7 CLI 守护进程 它连续解析文件大小超过 50M 的 json 我试图使用 pcntl fork 的单独进程将每 1000 个解析数据条目保存到 mysql 对于约 200k 行 它工作得很好 然后我得到pcntl fork