您好,登錄后才能下訂單哦!
本篇內容主要講解“php_swoole對進程的基本操作”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“php_swoole對進程的基本操作”吧!
在以往的開發項目中,要操作進程就會使用PHP自帶的pcntl拓展。但是pcntl存在著許多的不足:
pcntl沒有提供進程間通信的功能
pcntl不支持重定向標準輸入和輸出
pcntl只提供了fork這樣原始的接口,容易使用錯誤
這邊我們使用swoole進程管理模塊,用來替代PHP
的pcntl
;
場景:日常任務中,有時需要通過php腳本執行一些日志分析,隊列處理等任務,當數據量比較大時,可以使用多進程來處理。
準備:安裝PHP_swoole拓展;
write($data)
向管道內寫入數據。$data
的長度在Linux
系統下最大不超過8K
,MacOS/FreeBSD
下最大不超過2K
start():
執行fork調用,啟動子進程。
/** 創建子進程,將數據寫入管道,然后啟動子進程 */ $process = new \swoole_process([$this, 'sonProcessWork']); $process->write(json_encode($data_pop)); $pid = $process->start();
swoole_event_add(): 將一個socket加入到底層的reactor
事件監聽中;在子進程中處理一些耗時的計算或者操作;
/** 獲取管道的業務數據,進行相關的操作 */ public function sonProcessWork(\swoole_process $worker){ $GLOBALS['worker'] = $worker; swoole_event_add($worker->pipe, function($pipe) { /******start*你的業務邏輯 *******/ ..... /******end*你的業務邏輯 *******/ $worker->exit(0); }) }
wait(false)
回收結束運行的子進程
/** 根據信號處理紫禁城 */ private function sig_handler($signo) { Process::signal(SIGCHLD, function($sig) { //必須為false,非阻塞模式 while($ret = Process::wait(false)) { echo "PID={$ret['pid']}\n"; } }); }
到此,相信大家對“php_swoole對進程的基本操作”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。