php多進程工作

來源:互聯網
上載者:User

標籤:start   dex   int   pcl   整合   推送   ceil   提醒   color   

背景:每天早晨九點進行推送,使用者3-4萬人

技術瓶頸:php為弱類型的語言,從頭執行到尾,導致推送時間長度長大2個多小時

需求:減少推送時間,限定在半個小時

背景介紹完畢,開始正題:

將資料放入redis中,沒有最佳化前直接從mysql中提取資料,使用popen開啟進程指標執行相應邏輯,一下為部分代碼,代碼依賴關係沒有全部給出,

 1 $redis = rediscache();//連結redis 2 $rekey =‘key’;//在這裡要使用方法產生唯一key 3 if ( $redis->exists($rekey) ) { 4        $redis->del($rekey); 5 } 6 . 7 . 8 //資料提取過程. 9 .10 .11 .12 $data = array(//資料提取樣式13                 ‘user‘ => array($v[‘userid‘]),14                 ‘describe‘ => ‘微笑打卡提醒 第‘ . ceil($day) . ‘天‘,15                 ‘thing‘    => ‘微笑打卡‘,16                 ‘time‘     => date(‘Y-m-d H:i‘, mktime(9, 0, 0, date(‘m‘), date(‘d‘), date(‘Y‘))),17                 ‘url‘      => $jump,18                 ‘epiogue‘  => ‘點擊上傳微笑照片>‘,19             );20 $redis->lPush($rekey,serialize($data));//序列化存進列表中21 //設定key的到期時間,及時的歸還伺服器資源22 $length = $redis->lLen($rekey);23 $cell = 10000;//每個小時推送大概的數量24 if ( $redis->exists($rekey) && $length>0 ) {25             $index = $length/$cell;26             if ( intval($index) > 0 ) {27                 $redis->expire($rekey,intval($index)*3600);28             } else {29                 $redis->expire($rekey,3600);30       }31 }32 //進行多線程推送33 switch (intval($length)) {34   case $length<200:{//一個進程35       pclose(popen("php ./index.php -a 0 -b ".($length-1)." &",‘r‘));36        $return = true;37        break;38   }39     case $length >= 200:{//兩個進程40         if ( $length%2 == 0 ) {//是偶數41           $nextStart = $length/2;42         } else {//是奇數43           $nextStart = floor($length/2);44         }45 46        pclose(popen("php ./index.php -a 0 -b ".($nextStart)." &",‘r‘));//使用後要釋放進程資源47         pclose(popen("php ./index.php -a ".($nextStart+1)." -b ".($length-1)." &",‘r‘));//使用後釋放整合資源48         $return = true;49         break;50      }51      default:52        $return = false;53          break;54}55  return $return;

 popen:開啟一個指向進程的管道,該進程由派生指定的 command 命令執行而產生。使用後記得釋放進程資源

php多進程工作

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.