Home php教程 PHP开发 Share PHP-pcntl to implement multi-process code

Share PHP-pcntl to implement multi-process code

Dec 22, 2016 pm 04:16 PM

PHP can also process a transaction using multiple processes using the PCNTL series of functions. For example, I need to obtain 800,000 pieces of data from the database and then perform a series of subsequent processing. At this time, use a single process? You can wait until today next year. . . So you should use the pcntl function.

Let’s take a look at an example

Code

<?php
$arChildId = array();
 
for($i = 0; $i < 10; $i++)
{
$iPid = pcntl_fork();
if($iPid == -1)
{
  die(&#39;can\&#39;t be forked.&#39;);
}
 
if($iPid)
{
  # 主进程逻辑
  $arChildId[] = $iPid;
}
else
  {
  # 子进程逻辑
  $iPid = posix_getpid(); # 获取子进程的ID
  $iSeconds = rand(5, 30);
  echo &#39;* Process &#39;. $iPid. &#39; was created, and Executed, and Sleep &#39;. $iSeconds. PHP_EOL;
  excuteProcess($iPid, $iSeconds);
  exit();
}
}
 
while(count($arChildId) > 0)
{
foreach($arChildId as $iKey=> $iPid)
{
  $res = pcntl_waitpid($iPid, $status, WNOHANG);
 
  if($res == -1 || $res > 0)
  {
    unset($arChildId[$iKey]);
    echo &#39;* Sub process: &#39;. $iPid. &#39; exited with &#39;. $status. PHP_EOL;
  }
}
}
 
# 子进程执行的逻辑
function excuteProcess($iPid, $iSeconds)
{
file_put_contents(&#39;./log/&#39;.$iPid.&#39;.log&#39;, $iPid.PHP_EOL, FILE_APPEND);
sleep($iSeconds);
}
?>
Copy after login

Running results

* Process 16163 was created, and Executed, and Sleep 11
* Process 16164 was created, and Executed, and Sleep 21
* Process 16165 was created, and Executed, and Sleep 24
* Process 16166 was created, and Executed, and Sleep 27
* Process 16167 was created, and Executed, and Sleep 8
* Process 16168 was created, and Executed, and Sleep 14
* Process 16169 was created, and Executed, and Sleep 14
* Process 16170 was created, and Executed, and Sleep 26
* Process 16171 was created, and Executed, and Sleep 20
* Process 16172 was created, and Executed, and Sleep 21
* Sub process: 16167 exited with 0
* Sub process: 16163 exited with 0
* Sub process: 16169 exited with 0
* Sub process: 16168 exited with 0
* Sub process: 16171 exited with 0
* Sub process: 16164 exited with 0
* Sub process: 16172 exited with 0
* Sub process: 16165 exited with 0
* Sub process: 16170 exited with 0
* Sub process: 16166 exited with 0
Copy after login

For more articles about PHP-pcntl implementation of multi-process code, please pay attention to PHP Chinese website!

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)