php多程序實現
來源:http://blog.csdn.net/e421083458/article/details/22186475
PHP多程序實現
PHP有一組程序控制函式(編譯時需要–enable-pcntl與posix擴充套件),使得php能在nginx系統中實現跟c一樣的建立子程序、使用exec函式執行程式、處理訊號等功能。
CentOS 6 下yum安裝php的,預設是不安裝pcntl的,因此需要單獨編譯安裝,首先下載對應版本的php,解壓後
- cd php-version/ext/pcntl
- phpize
- ./configure && make && make install
- cp /usr/lib/php/modules/pcntl.so /usr/lib64/php/modules/pcntl.so
- echo "extension=pcntl.so" >> /etc/php.ini
- /etc/init.d/httpd restart
下面是示例程式碼:
[php] view plain copy print?- <?php
- header('content-type:text/html;charset=utf-8' );
- // 必須載入擴充套件
- if (!function_exists("pcntl_fork")) {
- die("pcntl extention is must !"
- }
- //總程序的數量
- $totals = 3;
- // 執行的指令碼數量
- $cmdArr = array();
- // 執行的指令碼數量的陣列
- for ($i = 0; $i < $totals; $i++) {
- $cmdArr[] = array("path" => __DIR__ . "/run.php", 'pid' =>$i ,'total' =>$totals);
- }
- /*
- 展開:$cmdArr
- Array
- (
- [0] => Array
- (
- [path] => /var/www/html/company/pcntl/run.php
- [pid] => 0
- [total] => 3
- )
- [1] => Array
- (
- [path] => /var/www/html/company/pcntl/run.php
- [pid] => 1
- [total] => 3
- )
- [2] => Array
- (
- [path] => /var/www/html/company/pcntl/run.php
- [pid] => 2
- [total] => 3
- )
- )
- */
- pcntl_signal(SIGCHLD, SIG_IGN); //如果父程序不關心子程序什麼時候結束,子程序結束後,核心會回收。
- foreach ($cmdArras$cmd) {
- $pid = pcntl_fork(); //建立子程序
- //父程序和子程序都會執行下面程式碼
- if ($pid == -1) {
- //錯誤處理:建立子程序失敗時返回-1.
- die('could not fork');
- } elseif ($pid) {
- //父程序會得到子程序號,所以這裡是父程序執行的邏輯
- //如果不需要阻塞程序,而又想得到子程序的退出狀態,則可以註釋掉pcntl_wait($status)語句,或寫成:
- pcntl_wait($status,WNOHANG); //等待子程序中斷,防止子程序成為殭屍程序。
- } else {
- //子程序得到的$pid為0, 所以這裡是子程序執行的邏輯。
- $path = $cmd["path"];
- $pid = $cmd['pid'] ;
- $total = $cmd['total'] ;
- echoexec("/usr/bin/php {$path} {$pid} {$total}")."\n";
- exit(0) ;
- }
- }
- ?>
相關推薦
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三維效果來做介面,,並且速度也不