ThinkPHP5中使用pthreads多執行緒
做了個爬蟲,因為PHP是單執行緒,所以爬取速度較慢,故使用了pthreads多執行緒,實現多執行緒爬取
多執行緒程式碼
namespace app\api\controller\v1;
use think\Db; //此處的Db類都以失效,試了多種引入方式都不行
use think\Cache; //同理
use think\Controller;
class Curl extends \Thread
{
public $url;
public $result;
public function __construct($url) {
$this->url = $url;
}
//執行緒執行
public function run() {
if ($this->url) {
$this->result = $this->doshu($this->url);
}
}
public function doshu($url){
return file_get_contents($url); //所需要訪問的網址
}
}
遇到的問題,執行緒中使用不了資料庫,不知道什麼原因,知道的大神可以解釋一下,我用了訪問內部的url來實現資料寫入
public function doZhiHu1(){
//多個本地網址
$urls = array('http://localhost/shopapi/api/v1.index/doZhiHu2',
'http://localhost/shopapi/api/v1.index/doZhiHu3',
'http://localhost/shopapi/api/v1.index/doZhiHu4',
'http://localhost/shopapi/api/v1.index/doZhiHu5',
'http://localhost/shopapi/api/v1.index/doZhiHu6');
foreach ($urls as $key=>$url) {
$workers[$key] = new curl($url); //new一個新的執行緒
$workers[$key]->start(); //開始執行
}
foreach ($workers as $key=>$worker) {
while($workers[$key]->isRunning()) { //檢視執行緒的狀態
usleep(100);
}
if ($workers[$key]->join()) { //等待執行緒執行結束
var_dump($workers[$key]->result);
}
}
}