この記事では主に、PHP と Python で実装されたスレッド プール マルチスレッド クローラー機能を紹介します。スレッド プール マルチスレッド クローラーを実装するための PHP と Python の完全な実装方法をサンプルの形式で分析します。それには
マルチスレッド クローラーを使用してコンテンツをクロールすると、パフォーマンスが向上します。ここでは、php および Python スレッド プールのマルチスレッド クローラーの例を示します。コードは次のとおりです。
python thread pool crasher:
<?php class Connect extends Worker //worker模式 { public function __construct() { } public function getConnection() { if (!self::$ch) { self::$ch = curl_init(); curl_setopt(self::$ch, CURLOPT_TIMEOUT, 2); curl_setopt(self::$ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt(self::$ch, CURLOPT_HEADER, 0); curl_setopt(self::$ch, CURLOPT_NOSIGNAL, true); curl_setopt(self::$ch, CURLOPT_USERAGENT, "Firefox"); curl_setopt(self::$ch, CURLOPT_FOLLOWLOCATION, 1); } /* do some exception/error stuff here maybe */ return self::$ch; } public function closeConnection() { curl_close(self::$ch); } /** * Note that the link is stored statically, which for pthreads, means thread local * */ protected static $ch; } class Query extends Threaded { public function __construct($url) { $this->url = $url; } public function run() { $ch = $this->worker->getConnection(); curl_setopt($ch, CURLOPT_URL, $this->url); $page = curl_exec($ch); $info = curl_getinfo($ch); $error = curl_error($ch); $this->deal_data($this->url, $page, $info, $error); $this->result = $page; } function deal_data($url, $page, $info, $error) { $parts = explode(".", $url); $id = $parts[1]; if ($info['http_code'] != 200) { $this->show_msg($id, $error); } else { $this->show_msg($id, "OK"); } } function show_msg($id, $msg) { echo $id."\t$msg\n"; } public function getResult() { return $this->result; } protected $url; protected $result; } function check_urls_multi_pthreads() { global $check_urls; //定义抓取的连接 $check_urls = array( 'http://xxx.com' => "xx网",); $pool = new Pool(10, "Connect", array()); //建立10个线程池 foreach ($check_urls as $url => $name) { $pool->submit(new Query($url)); } $pool->shutdown(); } check_urls_multi_pthreads(); python 多线程 def handle(sid)://这个方法内执行爬虫数据处理 pass class MyThread(Thread): """docstring for ClassName""" def __init__(self, sid): Thread.__init__(self) self.sid = sid def run(): handle(self.sid) threads = [] for i in xrange(1,11): t = MyThread(i) threads.append(t) t.start() for t in threads: t.join()
概要: 以上がこの記事の全内容です、皆様の学習に少しでもお役に立てれば幸いです。
関連する推奨事項:
php
カプセル化されたページページングクラスレトロ効果を実現するphp名前空間の3つの使用方法
php_imagickメソッド
以上がスレッドプールマルチスレッドクローラ機能をphpとpythonで実装した例を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。