教程集 www.jiaochengji.com
教程集 >  脚本编程  >  php  >  正文 php教程之多进程实例(3)

php教程之多进程实例(3)

发布时间:2017-07-18   编辑:jiaochengji.com
本文介绍下,在php编程中,实现php多进程的实例代码,本文是第三节的内容,有需要的朋友参考下。

本节内容:
php教程之php多进程实例的第三部分。

5,windows多线程
windows系统不支持pcntl函数,幸好有curl_multi_exec()这个工具,利用内部的多线程,访问多个链接,每个链接可以作为一个任务。

编写脚本 test1.php
 

复制代码 代码示例:
<?php
//PHP多进程实例
date_default_timezone_set( 'Asia/Chongqing'); 
$tasks = array( 
     'http://localhost/feedbowl/t2.php?job=task1', 
     'http://localhost/feedbowl/t2.php?job=task2', 
     'http://localhost/feedbowl/t2.php?job=task3' 
); 
$mh = curl_multi_init(); 
foreach ($tasks as $i => $task){ 
     $ch[$i] = curl_init(); 
     curl_setopt($ch[$i], CURLOPT_URL, $task); 
     curl_setopt($ch[$i], CURLOPT_RETURNTRANSFER, 1); 
     curl_multi_add_handle($mh, $ch[$i]); 

do {$mrc = curl_multi_exec($mh,$active); } while ($mrc == CURLM_CALL_MULTI_PERFORM); 
while ($active && $mrc == CURLM_OK) { 
     if (curl_multi_select($mh) != -1) { 
       do {$mrc = curl_multi_exec($mh, $active); } while ($mrc == CURLM_CALL_MULTI_PERFORM); 
     } 

// completed, checkout result 
foreach ($tasks as $j => $task){ 
     if (curl_error($ch[$j])){ 
          echo "task ${j} [$task ] error " , curl_error($ch[$j]), "\r\n" ; 
     } else { // www.jbxue.com
          echo "task ${j} [$task ] get: \r\n" , curl_multi_getcontent($ch[$j]), "\r\n" ; 
     } 

?> 

编写脚本 test2.php
 

复制代码 代码示例:
<?php 
date_default_timezone_set( 'Asia/Chongqing'); 
echo "child start, pid ", getmypid(), "\r\n" ; 
for ($i=0; $i<5; ++$i){ 
     beep(); 

exit (0); 
// *** 
function beep(){ 
    echo getmypid(), "\t" , date('Y-m-d H:i:s' , time()), "\r\n"; 
    sleep(1); 

?> 

用命令行运行PHP代码:
#php -f test1.php &

输出结果:
 

task 0 [http://localhost/feedbowl/t2.php?job=task1] get:
child start, pid 5804
5804    2013-01-15 20:22:35
5804    2013-01-15 20:22:36
5804    2013-01-15 20:22:37
5804    2013-01-15 20:22:38
5804    2013-01-15 20:22:39

task 1 [http://localhost/feedbowl/t2.php?job=task2] get:
child start, pid 5804
5804    2013-01-15 20:22:35
5804    2013-01-15 20:22:36
5804    2013-01-15 20:22:37
5804    2013-01-15 20:22:38
5804    2013-01-15 20:22:39

task 2 [http://localhost/feedbowl/t2.php?job=task3] get:
child start, pid 5804
5804    2013-01-15 20:22:35
5804    2013-01-15 20:22:36
5804    2013-01-15 20:22:37
5804    2013-01-15 20:22:38
5804    2013-01-15 20:22:39

从打印的时间看到,多个任务几乎是同时运行的。

>>> php多进程实例-目录索引:
php教程之多进程实例(1)
php教程之多进程实例(2)

>>> 延伸阅读:
php多进程并行执行脚本的代码
有关php多进程的用法举例
php中启用多进程的实例详解(ubuntu系统)
php实现多进程 多任务的一例代码
php 多进程编程的深入探讨
php 多进程实现守护进程的实例代码
php 多进程编程的实例代码
php 多进程解决代码常驻内存的问题
PHP 多进程的实现代码一例
PHP多进程并发控制的测试实例
php多进程操作的三个实例

>>> 延伸阅读:
php多进程并行执行脚本的代码
有关php多进程的用法举例
php中启用多进程的实例详解(ubuntu系统)
php实现多进程 多任务的一例代码
php 多进程编程的深入探讨
php 多进程实现守护进程的实例代码
php 多进程编程的实例代码
php 多进程解决代码常驻内存的问题
PHP 多进程的实现代码一例
PHP多进程并发控制的测试实例
php多进程操作的三个实例

您可能感兴趣的文章:
php教程之多进程实例(3)
php入门教程(索引)
php教程之多进程实例(2)
适合入门的php基础系列教程
PHP正则取图片路径的例子
php为什么要使用swoole
php多进程操作的三个实例
PHP多进程、信号量及孤儿进程和僵尸进程
php多进程函数
关于php多进程编程(代码详解)

[关闭]
~ ~