广告
返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >PHP怎么限制定时任务的进程数量
  • 840
分享到

PHP怎么限制定时任务的进程数量

2023-06-14 06:06:31 840人浏览 安东尼
摘要

这篇文章主要介绍PHP怎么限制定时任务的进程数量,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!可能存在的问题当我们处理大量数据的时候,脚本的执行时间可能很长,或者重复处理某条数据(写错的情况下)。为了避免数据的重复处

这篇文章主要介绍PHP怎么限制定时任务的进程数量,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

可能存在的问题

当我们处理大量数据的时候,脚本的执行时间可能很长,或者重复处理某条数据(写错的情况下)。

为了避免数据的重复处理、运行脚本过多导致服务器压力过大等问题,我们需要限制脚本的运行数量。

如何做

思路一

查询某种标识的进程数量,如果超过一定数量,则直接退出,不处理。

思路二

记录每次的PID,可以使用 文件、redis、memcached 等来存储。

当启动一个新进程的时候,去查一下这个标识下面有哪些PID,是否还在运行,且与当前标识有关系。

当超过一定数量的时候,直接退出,不处理。

实践

思路一实践

这里通过 linux 的 ps、grep、wc 的命令来获取指定标识的运行进程数。

<?phpfunction canRun($ident, $maxNum){  $cmd = sprintf('ps ax | grep %s | grep -v /bin/sh | grep -v grep | wc -l', $ident);  $fp = @popen($cmd, 'r');  $num = (int)trim(@fread($fp, 2096));  @pclose($fp);  return $num <= $maxNum;}

思路二实践

这里使用 Redis 存储 pid 信息。

通过 /proc/{pid}/cmdline 文件检测指定进程是否还在运行。

<?phpfunction isSurvive($pid, $ident){  // 获取指定pid的cmdline文件  $cmdlinePath = sprintf('/proc/%s/cmdline', $pid);  if (!is_file($cmdlinePath)) {   return false;  }  $cmdline = trim(file_get_contents($cmdlinePath));  // 检查标识是否在 cmdline 中  return strpos($cmdline, $ident) !== false;}function canRun($ident, $maxNum){  // 假设已经链接上  $redisHandler = getRedis();  // 定义一个key  $key = sprintf('php:job:%s:pid', $ident);  // 当前的PID  $currentPid = getmypid();  // 将当前的PID写入redis  $redis->sAdd($key, $currentPid);  // 获取redis中的所有pid  $pids = $redis->sMembers($key);  // 遍历pid,检查是否有效  foreach ($pids as $index => $pid) {    if ($currentPid == $pid) {      continue;    }    // 检查 pid 是否还在运行中    if (isSurvive($pid, $ident)) {      continue;    }    // 若不再运行,则直接删除    unset($pids[$index]);    $redis->sRemove($key, $pid);  }  return count($pids) <= $maxNum;}

关于标识

关于标识,可能我们在运行一些定时脚本的时候,统一的部分可能就是 php 了;或者,拥有相同标识的脚本,我们要归为几类。

为了能够实现这些需求,我们可以通过 php 的内置函数 cli_set_process_title 来实现自定义 COMMAND。
demo.php:

这个时候,我们运行 demo.php,然后通过 ps ax 可以看到如下结果:

PID  USER   TIME COMMAND  1 root   0:09 php-fpm: master process (/usr/local/etc/php-fpm.conf)  7 root   0:16 php-fpm: pool www  8 root   0:15 php-fpm: pool www  9 root   0:14 php-fpm: pool www  10 root   0:00 sh 663 root   0:00 sh 690 root   0:00 {php} Job Demo 691 root   0:00 ps ax

修改指定脚本的进程标题,我们就可以实现定义某些脚本的标识了。

以上是“PHP怎么限制定时任务的进程数量”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注编程网PHP编程频道!

--结束END--

本文标题: PHP怎么限制定时任务的进程数量

本文链接: https://www.lsjlt.com/news/268638.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • PHP怎么限制定时任务的进程数量
    这篇文章主要介绍PHP怎么限制定时任务的进程数量,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!可能存在的问题当我们处理大量数据的时候,脚本的执行时间可能很长,或者重复处理某条数据(写错的情况下)。为了避免数据的重复处...
    99+
    2023-06-14
  • PHP如何限制定时任务的进程数量
    前言 现在的工作中,经常要写一些脚本做一些异步的操作。 一般是大量的数据修改,或者解决部分并发问题。 为了能够稳定的做好数据处理,一般情况下会用定时脚本的方式。 那么问题来了。 可...
    99+
    2022-11-11
  • MySQL定时任务与存储过程是怎么样的
    MySQL定时任务与存储过程是怎么样的,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。 shell 定时任务:/us...
    99+
    2022-10-19
  • 云服务器限制流量吗怎么解除绑定的手机
    首先,您可以尝试通过修改SYN和ACL的设置来解除限制流量。具体步骤如下: 登录云服务器管理控制台,在“应用管理”栏中找到“SYN/ACL控制”,然后点击其下拉菜单,找到“解除所有流量限制”。 在弹出的设置界面中,您可以修改流量限制级别...
    99+
    2023-10-27
    绑定 流量 服务器
  • 云服务器限制流量吗怎么解除绑定的账号
    首先,如果您需要使用云服务器,并且已经在您的设备上绑定了设备,可以通过以下步骤解除绑定: 进入云服务器管理界面:在您的设备上打开“控制面板”,点击“管理工具”。 选择“服务和应用程序”:找到您的云服务器,点击其名称进入。 找到“Amaz...
    99+
    2023-10-28
    绑定 账号 流量
  • 云服务器限制流量吗怎么解除绑定的手机号
    在手机设置中找到“流量与网络”选项。 点击“流量与网络”,查看是否有任何选项可以让您解除绑定。 如果没有选项,请单击“添加”按钮,将您的手机号码添加到该选项。 单击“确认”按钮,完成解绑手机号的过程。 在添加手机号码到云服务器之后,您...
    99+
    2023-10-27
    手机号 绑定 流量
  • PHP怎么进行数字和字母的输入限制验证
    本文小编为大家详细介绍“PHP怎么进行数字和字母的输入限制验证”,内容详细,步骤清晰,细节处理妥当,希望这篇“PHP怎么进行数字和字母的输入限制验证”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。什么是输入限制?在...
    99+
    2023-07-05
  • C语言操作时间函数之怎么实现定时执行某个任务小程序
    本篇内容主要讲解“C语言操作时间函数之怎么实现定时执行某个任务小程序”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C语言操作时间函数之怎么实现定时执行某个任务小程序”吧!时间概述由上图可知:通过...
    99+
    2023-06-16
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作