1. 程式人生 > >php多程序實現

php多程序實現

來源:http://blog.csdn.net/e421083458/article/details/22186475

PHP多程序實現

PHP有一組程序控制函式(編譯時需要–enable-pcntl與posix擴充套件),使得php能在nginx系統中實現跟c一樣的建立子程序、使用exec函式執行程式、處理訊號等功能。

CentOS 6 下yum安裝php的,預設是不安裝pcntl的,因此需要單獨編譯安裝,首先下載對應版本的php,解壓後

[plain] view plain copy print?在CODE上檢視程式碼片派生到我的程式碼片
  1. cd php-version/ext/pcntl  
  2. phpize  
  3. ./configure && make && make install  
  4. cp /usr/lib/php/modules/pcntl.so /usr/lib64/php/modules/pcntl.so  
  5. echo "extension=pcntl.so" >> /etc/php.ini  
  6. /etc/init.d/httpd restart  
方便極了。

下面是示例程式碼:

[php] view plain copy print?在CODE上檢視程式碼片派生到我的程式碼片
  1. <?php  
  2. header('content-type:text/html;charset=utf-8' );  
  3. // 必須載入擴充套件
  4. if (!function_exists("pcntl_fork")) {  
  5.     die("pcntl extention is must !"
    );  
  6. }  
  7. //總程序的數量
  8. $totals = 3;  
  9. // 執行的指令碼數量
  10. $cmdArr = array();  
  11. // 執行的指令碼數量的陣列
  12. for ($i = 0; $i < $totals$i++) {  
  13.     $cmdArr[] = array("path" => __DIR__ . "/run.php",  'pid' =>$i ,'total' =>$totals);  
  14. }  
  15. /* 
  16. 展開:$cmdArr 
  17. Array 
  18. ( 
  19.     [0] => Array 
  20.         ( 
  21.             [path] => /var/www/html/company/pcntl/run.php
     
  22.             [pid] => 0 
  23.             [total] => 3 
  24.         ) 
  25.     [1] => Array 
  26.         ( 
  27.             [path] => /var/www/html/company/pcntl/run.php 
  28.             [pid] => 1 
  29.             [total] => 3 
  30.         ) 
  31.     [2] => Array 
  32.         ( 
  33.             [path] => /var/www/html/company/pcntl/run.php 
  34.             [pid] => 2 
  35.             [total] => 3 
  36.         ) 
  37. ) 
  38. */
  39. pcntl_signal(SIGCHLD, SIG_IGN); //如果父程序不關心子程序什麼時候結束,子程序結束後,核心會回收。
  40. foreach ($cmdArras$cmd) {  
  41.     $pid = pcntl_fork();    //建立子程序
  42.     //父程序和子程序都會執行下面程式碼
  43.     if ($pid == -1) {  
  44.         //錯誤處理:建立子程序失敗時返回-1.
  45.         die('could not fork');  
  46.     } elseif ($pid) {  
  47.         //父程序會得到子程序號,所以這裡是父程序執行的邏輯
  48.         //如果不需要阻塞程序,而又想得到子程序的退出狀態,則可以註釋掉pcntl_wait($status)語句,或寫成:
  49.         pcntl_wait($status,WNOHANG); //等待子程序中斷,防止子程序成為殭屍程序。
  50.     } else {  
  51.         //子程序得到的$pid為0, 所以這裡是子程序執行的邏輯。
  52.         $path   = $cmd["path"];  
  53.         $pid = $cmd['pid'] ;  
  54.         $total = $cmd['total'] ;  
  55.         echoexec("/usr/bin/php {$path} {$pid} {$total}")."\n";  
  56.         exit(0) ;  
  57.     }  
  58. }  
  59. ?> 

相關推薦

php程序實現

來源:http://blog.csdn.net/e421083458/article/details/22186475 PHP多程序實現 PHP有一組程序控制函式(編譯時需要–enable-pcntl與posix擴充套件),使得php能在nginx系統中實現跟c一樣的建立

從0到1優雅的實現PHP程序管理

業務場景 在我們實際的業務場景中(PHP技術棧),我們可能需要定時或者近乎實時的執行一些業務邏輯,簡單的我們可以使用unix系統自帶的crontab實現定時任務,但是對於一些實時性要求比較高的業務就不適用了,所以我們就需要一個常駐記憶體的任務管理工具,為了保證實時

PHP繼承實現--Traits

use echo 實例 ren 代碼復用 manual 方式 兩個 text ---恢復內容開始--- PHP 5.4.0 開始,PHP 實現了代碼復用的一個方法,稱為 traits。 Traits 是PHP中一種類似多繼承的方法。Trait 為了減少單繼承語言的限制,使開

PHP結巴程序實現

來源 ace 重復 cnblogs repl 留言 結巴 編程 替換 <?php $str="我...我要要要...學學學..編編程"; $str=preg_replace(‘/\./‘,‘‘,$str);//我我要要要學學學編編程 $str=pre

PHP程序初探 --- 利用程序開發點兒東西吧

[原文地址:https://blog.ti-node.com/blog...] 乾巴巴地叨逼叨了這麼久,時候表演真正的技術了! 做個高階點兒的玩意吧,加入我們要做一個任務系統,這個系統可以在後臺幫我們完成一大波(注意是一大波)資料的處理,那麼我們自然想到,多開幾個程序分開處理這些資料,同時我們不能執行了p

典型C/S模式___程序實現

一、思路 server程序通過accept()接收了一個連線請求。然後,子程序將作為“種籽”的server方插口關閉,而使用新的插口與client程序通訊併為之提供服務。而父程序則把新的插口關閉,並再一次呼叫accept(),通過“種籽”插口來接收新的連線請求。 子程序注意事項有

程序程序實現工)

1.程序 1.程式:靜態的,一個.py檔案就是儲存在硬碟中的,屬於靜態的概念 2.程序:動態的,程式碼加所需的資源 = 程序,是作業系統分配程式執行資源的單位,多程序也是可以滿足多工的 2.程序的狀態有:

websocket基於php 記一次結合PHP程序和socket.io解決問題的經歷

記一次結合PHP多程序和socket.io解決問題的經歷     公司是做棋牌遊戲的。前段時間接到一個後臺人工鑑定並處理通牌作弊玩家的需求,其中需要根據幾個玩家的遊戲ID查詢並計算他們在某段時間內彼此之間玩牌輸贏次數和輸贏總額。   牌局資料是儲存在日誌中心的,他們把牌

PHP程序引發的msyql連線數問題

PHP多程序引發的msyql連線數問題 業務中有一塊採用了PHP的pcntl_fork多程序,希望能提高效率,但是在執行的時候資料庫報錯 PDO::prepare(): Premature end of data (mysqlnd_wireprotocol

php 程序下mysql連線 gone away

php 在命令列模式下啟動多程序如果父程序有sql查詢,可能會導致子程序裡面的sql查詢 報錯  General error: 2006 MySQL server has gone away 當fork的子程序都共用相同的mysql連線的時候,會出現該錯誤,每個子程序單獨一

TCP伺服器的單程序程序實現

一、socket程式設計 在理解TCP伺服器時,我們必須瞭解socket程式設計,在上篇部落格中,我們知道在TCP/IP協議中,“IP地址+TCP埠號/UDP埠號”唯一標識網路通訊中的唯一一個程序,我們把“IP地址+埠號”就成為socket。 在TCP協議中

併發伺服器--程序實現

通過簡單的socket可以實現一對一的c/s通訊,當多個客戶端同時進行伺服器訪問,那麼伺服器只能按序的一一進行處理,除了第一個客戶端,其餘客戶端都會陷入等待。並且這樣的程式只能實現半雙工通訊(資料能雙向傳輸,但同一時刻只能單向傳遞,通過切換傳輸方向實現雙工),而且實現方式繁瑣

php程序單例模式下的 MySQL及Redis連線錯誤修復

問題描述: 前幾天寫了個php常駐指令碼,主要邏輯如下 //跑完資料後休息60秒 $sleepTime = 60; $maxWorker = 10; while (true) { $htmlModel = new DetailHtmlMode

pandas apply 函式 程序實現

@creat_data: 2017-05-08 @author: huangyongye 前言: 在進行資料處理的時候,我們經常會用到 pandas 。但是 pandas 本身好像並沒有提供多程序的機制。本文將介紹如何來自己實現 pandas (appl

PHP程序抓取百度搜索結果

<?php /** * 多程序抓取百度結果頁自然結果,包括標題、摘要、圖片、連結、來源 * @since 2016-04-15 */ class NaturalResultSpider { private $_strQuery = null; pub

linux網路程式設計:使用程序實現socket同時收發資料

轉載:http://blog.csdn.net/li_wen01/article/details/52685844 前面已講過使用一個程序實現服務端和客戶端P2P通訊的例項,但是它只能同時處理一個客戶端的連線。如果要實現併發處理多個客戶端的連線並且實現P2P通訊,可以使

Linux網路程式設計 -- 程序實現使用者

server.c #include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <arpa/inet.h> #include <

OSX中php程序安裝pcntl

php實現多程序,原始檔: <?php $pid = pcntl_fork(); if($pid == -1){ die('could not fork'); }else{ if ($pid) { var_dump('parent:'.$pid);

python 使用程序實現併發程式設計/使用queue進行程序間資料交換

import time import os import multiprocessing from multiprocessing import Queue, pool """ 一.Python 使用多程序實現併發程式設計: 因為cpython直譯器中有GIL存在的原因(每個程序都會維護一

opengl程序實現視窗

1.一個視窗一個子程序.子程序接收主程序發過來的使用者動作,完成opengl介面渲染.並通過共享記憶體+訊息,將渲染結果傳於主程序.2.主程序不渲染,只處理各種事情.並接收子程序的渲染結果.並顯示出來.這是個不錯的主意,可以以超酷的opengl三維效果來做介面,,並且速度也不