好湿?好紧?好多水好爽自慰,久久久噜久噜久久综合,成人做爰A片免费看黄冈,机机对机机30分钟无遮挡

主頁 > 知識庫 > PHP如何限制定時任務(wù)的進程數(shù)量

PHP如何限制定時任務(wù)的進程數(shù)量

熱門標簽:注冊400電話申請 福州人工外呼系統(tǒng)哪家強 百度商鋪地圖標注 衡水外呼系統(tǒng)平臺 常州地圖標注服務(wù)商 地圖標注平臺怎么給錢注冊 新河科技智能外呼系統(tǒng)怎么樣 安裝電銷外呼系統(tǒng) 釘釘打卡地圖標注

前言

現(xiàn)在的工作中,經(jīng)常要寫一些腳本做一些異步的操作。

一般是大量的數(shù)據(jù)修改,或者解決部分并發(fā)問題。

為了能夠穩(wěn)定的做好數(shù)據(jù)處理,一般情況下會用定時腳本的方式。

那么問題來了。

可能存在的問題

當我們處理大量數(shù)據(jù)的時候,腳本的執(zhí)行時間可能很長,或者重復(fù)處理某條數(shù)據(jù)(寫錯的情況下)。

為了避免數(shù)據(jù)的重復(fù)處理、運行腳本過多導(dǎo)致服務(wù)器壓力過大等問題,我們需要限制腳本的運行數(shù)量。

如何做

思路一

查詢某種標識的進程數(shù)量,如果超過一定數(shù)量,則直接退出,不處理。

思路二

記錄每次的PID,可以使用 文件、redis、memcached 等來存儲。

當啟動一個新進程的時候,去查一下這個標識下面有哪些PID,是否還在運行,且與當前標識有關(guān)系。

當超過一定數(shù)量的時候,直接退出,不處理。

實踐

思路一實踐

這里通過 linux 的 ps、grep、wc 的命令來獲取指定標識的運行進程數(shù)。

?php
/**
 * 是否可以運行
 *
 * @param string $ident 標識
 * @param integer $maxNum 最大運行數(shù)量
 *
 * @return bool
 */
function 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 文件檢測指定進程是否還在運行。

?php
/**
 * 檢查 pid 是否存活
 *
 * @param string $pid  PID
 * @param string $ident 標識
 *
 * @return bool
 */
function 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;
}

/**
 * 是否可以運行
 *
 * @param string $ident 標識
 * @param integer $maxNum 最大運行數(shù)量
 *
 * @return bool
 */
function canRun($ident, $maxNum)
{
  // 假設(shè)已經(jīng)鏈接上
  $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;
}


關(guān)于標識

關(guān)于標識,可能我們在運行一些定時腳本的時候,統(tǒng)一的部分可能就是 php 了;或者,擁有相同標識的腳本,我們要歸為幾類。

為了能夠?qū)崿F(xiàn)這些需求,我們可以通過 php 的內(nèi)置函數(shù) cli_set_process_title 來實現(xiàn)自定義 COMMAND。
demo.php:

這個時候,我們運行 demo.php,然后通過 ps ax 可以看到如下結(jié)果:

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

修改指定腳本的進程標題,我們就可以實現(xiàn)定義某些腳本的標識了。

最后

沒 BUG 的功能,也可能出現(xiàn) BUG,我們需要更多的思考和設(shè)計減少這類錯誤的發(fā)生。

到此這篇關(guān)于PHP如何限制定時任務(wù)進程數(shù)量的文章就介紹到這了,更多相關(guān)PHP限制進程數(shù)量內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • php多進程中的阻塞與非阻塞操作實例分析
  • php多進程并發(fā)編程防止出現(xiàn)僵尸進程的方法分析
  • PHP多進程編程之僵尸進程問題的理解
  • PHP多進程之pcntl_fork的實例詳解
  • PHP基于文件鎖解決多進程同時讀寫一個文件問題示例
  • PHP守護進程的兩種常見實現(xiàn)方式詳解
  • php中實現(xiàn)進程鎖與多進程的方法
  • PHP多進程編程總結(jié)(推薦)
  • 詳解PHP調(diào)用Go服務(wù)的正確方式

標簽:鷹潭 克拉瑪依 鶴崗 唐山 白城 六安 遼陽 柳州

巨人網(wǎng)絡(luò)通訊聲明:本文標題《PHP如何限制定時任務(wù)的進程數(shù)量》,本文關(guān)鍵詞  PHP,如何,限制,定時,任務(wù),;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《PHP如何限制定時任務(wù)的進程數(shù)量》相關(guān)的同類信息!
  • 本頁收集關(guān)于PHP如何限制定時任務(wù)的進程數(shù)量的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    主站蜘蛛池模板: 国产一区二区高清在线| 三大高傲校花被调教成好文| 好大好硬?用力?深一点影院| 欧美视频三级| 喜爱夜蒲3大尺度视频粤语| 电影还爱着吗| 汤唯被实干20分钟视频 梁朝伟 | 爱欲情迷| 亚洲免费福利| 成人女人免费毛片???| 国产精品成| 少妇下面好多水好紧| 丝袜足控一区二区三区| 久久精品国产精品亚洲婷婷| 亚洲高清在线播放| 欧美综合色在线图区| 被下人伦流澡到高潮小说| 带娇妻公园露出调教| 97人妻AV人人澡人人爽人国产| a一级网站| 男人j进入女人j内部免费网站| 私密入口| 天天躁日日躁白天躁晚上躁| 日韩欧美一区二区三区不卡视频| tobu中国在线播放免费动漫| 扒开小泬疯狂做爰XXXⅩ| 日韩 在线 中文 制服一区 | 亚·色app免费下载| 欧美videosfree艳妇交| 包惜弱婬乱版| 垃圾分类手抄报图片内容| 国产精品夫妻| 亚洲午夜毛片一级久久久精品| Japanese国产麻豆白洁| 护士系列最好看的av| 成人在线综合| 小男生公交车Hr侵犯肉| 女贱奴请主人踩贱乳调教h| 20日本xxxxxxxxx19| 一本大道香蕉久在线不卡视频| 一本久道中文字幕无码道一区二|