PHP 多进程实践(3)

WBOY
Freigeben: 2016-06-13 11:10:37
Original
1021 Leute haben es durchsucht

PHP 多进程实践(三)

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

编写脚本 test1.php

<?phpdate_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 resultforeach ($tasks as $j => $task){     if (curl_error($ch[$j])){          echo "task ${j} [$task ] error " , curl_error($ch[$j]), "\r\n" ;     } else {          echo "task ${j} [$task ] get: \r\n" , curl_multi_getcontent($ch[$j]), "\r\n" ;     }}?>
Nach dem Login kopieren



编写脚本 test2.php

<?phpdate_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);}?>
Nach dem Login kopieren



用命令行运行
#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

从打印的时间看到,多个任务几乎是同时运行的。
Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!