python多線程并發,php的pthreads擴展實現執行多線程任務

 2023-10-25 阅读 516 评论 0

摘要:一、PHP安裝pthreads的多線程擴展 下載pthreads源碼:http://pecl.php.net/package/pthreads 首先確定安裝的php版本是線程安全的,如果不是的話重新編譯加上 --enable-maintainer-zts \ 1.解壓tar -zxvf pthreads-0.0.44.tgz ; 2.進入源碼文件夾 cd pthreads-0.0

一、PHP安裝pthreads的多線程擴展

下載pthreads源碼:http://pecl.php.net/package/pthreads

首先確定安裝的php版本是線程安全的,如果不是的話重新編譯加上 --enable-maintainer-zts \

1.解壓tar -zxvf pthreads-0.0.44.tgz ;

2.進入源碼文件夾 cd pthreads-0.0.44 執行 /usr/local/php/bin/phpize;

python多線程并發,3.執行./configure --with-php-config=/usr/local/php/bin/php-config;

4.執行make && make install;

5.編輯/usr/local/php/lib/php.ini加上extension=pthreads.so

6.重啟php就行了...

7、php -m | grep pthreads 查看是否安裝完成

php多線程和java多線程、注意:安裝 pthreads 需要的是已安裝的PHP版本為 thread safly(安全線程)已開啟

?

二、使用多線程的方法

1、 入口文件 run.php

<?php
header('Content-Type:application/json; charset=utf-8');
error_reporting(E_ERROR | E_CORE_ERROR | E_PARSE);/*** 任務執行入口*/$stime = time();require_once("./thread.php");class Task{private $threadNum = 5; //線程并行執行個數public function goRun(){$start_time = time();//構造任務列表$GLOBALS["taskList"] = [['name'=>'任務1', 'url'=>'url1'],['name'=>'任務2', 'url'=>'url2'],['name'=>'任務3', 'url'=>'url3'],['name'=>'任務4', 'url'=>'url4'],['name'=>'任務5', 'url'=>'url5'],['name'=>'任務6', 'url'=>'url6'],['name'=>'任務7', 'url'=>'url7'],['name'=>'任務8', 'url'=>'url8'],['name'=>'任務9', 'url'=>'url9'],['name'=>'任務10', 'url'=>'url10'],];while(count($GLOBALS["taskList"])){$taskList = $this->readyThread($GLOBALS["taskList"]);foreach($taskList as $key=>$val){$token = "task_".$this->randomkeys(20);$pool[$token] = new TaskThread($key, $val);echo "---------------創建線程:".$token.PHP_EOL;}echo "等待執行完成".PHP_EOL;//開始執行線程foreach ($pool as $key=>$th) {$th->start();sleep(1);   //延遲啟動unset($pool[$key]);}}sleep(3);//線程回收完畢$end_time = time();$use = $end_time - $start_time;echo date("Ymd H:i:s")."    執行完畢...     USE  {$use} s".PHP_EOL;exit;}public function randomkeys($length) {$returnStr='';$pattern = '1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLOMNOPQRSTUVWXYZ';for($i = 0; $i < $length; $i ++) {$returnStr .= $pattern {mt_rand ( 0, 61 )}; //生成php隨機數}return $returnStr;}/*** 開啟線程前分配線程任務*/private function readyThread($data) {$tasklist = array();$i = 1;foreach ($data as $key => $val) {if ($i > $this->threadNum) {return $tasklist;}$tasklist[$i][] = $val;unset($GLOBALS["taskList"][$key]);$i++;}return $tasklist;}
}$Task = new Task();
$Task->goRun();

2、多線程控制器文件 thread.php

<?php
/*** 多線程控制器*/class TaskThread extends Thread {private $task;private $name;//構造function __construct($name, $task) {$this->task = $task;$this->name = $name;unset($task, $name);}//線程主體function run() {//任務初始化執行【此處根據自己的需要,編輯具體任務執行方法】echo "<pre/>";print_r($this->task);unset($this->task);unset($this->name);exit();}}


?

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://808629.com/165924.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 86后生记录生活 Inc. 保留所有权利。

底部版权信息