利用curl_multi_init並行多執行緒處理網路資料
for ($i=0; $i < 100; $i++)
{
$urls[] = "http://blog.csdn.net/lg_lin?wd=".mt_rand(10000,20000);
}
$t = microtime(true);
//單執行緒
foreach ($urls as $key => $value)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch , CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_URL, $value);
$response = curl_exec($ch);
curl_close($ch);
$result_new[$key] = $response;
}
var_dump($result_new);
$e = microtime(true);
echo "For迴圈:".($e-$t)."\n";
/**
**** 多執行緒****
* 由於受網路頻寬限制,一次性不能併發太多,可以分批處理
* 總量超過100以後,效果就比單執行緒明顯提高
*/
$p = 5;//每次執行多少條
$ring = ceil(count($urls) / $p);
for($n = 0; $n < $ring; $n++)
{
$temp_url = array();
$star = $n * $p;
$end = ($n+1) * $p;
for($ii = $star; $ii < $end; $ii++)
{
if (isset($urls[$ii]))
{
$temp_url[] = $urls[$ii];
}
}
$mh = curl_multi_init();
foreach ($temp_url as $i => $url) {
$conn[$i] = curl_init($url);
curl_setopt($conn[$i], CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
curl_setopt($conn[$i], CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($conn[$i], CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($conn[$i], CURLOPT_TIMEOUT, 30);
curl_setopt($conn[$i], CURLOPT_URL, $url);
curl_multi_add_handle($mh,$conn[$i]);
}
do{
curl_multi_exec($mh, $active);
} while ($active);
$active = null;
foreach ($temp_url as $i => $url) {
$data[$i] = curl_multi_getcontent($conn[$i]); // 獲得爬取的程式碼字串
}
foreach ($temp_url as $i => $url) {
curl_multi_remove_handle($mh, $conn[$i]);
curl_close($conn[$i]);
}
curl_multi_close($mh);
var_dump($data);
}
$t = microtime(true);
echo "多執行緒:".($t-$e)."\n";
exit();
相關推薦
利用curl_multi_init並行多執行緒處理網路資料
for ($i=0; $i < 100; $i++) { $urls[] = "http://blog.csdn.net/lg_lin?wd=".mt_rand(10000,20000); } $t = microtime(true); /
Java多執行緒處理大量資料
執行緒技術在Java整個技術體系中佔據著非常重要的位置,併發環境是非常複雜的,什麼情況都有可能發生,Java給我們提供了執行緒排程以及同步等機制來保證多執行緒環境下我們的程式碼依然可以正確執行,下面是多個執行緒處理大量資料的簡單實現,入門級import java.util.A
vc 多執行緒處理臨界資料,
#include <iostream> #include <Windows.h> using namespace std; int sum = 100; DWORD WINAPI threadfun(LPVOID lpParameter); int t
JAVA 多執行緒處理大資料LIST
package com.sinosoft.audit; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.concurrent.CountDo
多執行緒處理多執行緒網路程式設計問題
1、 一個伺服器,多個客戶端訪問。 2、多個伺服器多執行緒接收多個客戶端,但是埠號是固定的。 java 網路程式設計之TCP +多執行緒 + 執行緒池 資料: https://blog.csdn.net/tanghui270270/article/details/80603199
多執行緒處理慢sql查詢小筆記~
多執行緒處理慢sql查詢以及List(Array)的拆分 系統資料量不大,但是訪問速度特別慢,使用多執行緒優化一下!!! 優化結果:訪問時間縮短了十幾秒 25s --> 8s 一、List的拆分:Iterables.partition 注意: 引入的包為google名下的 &n
HTML5學習之WebWork多執行緒處理
多執行緒技術在服務端技術中已經發展的很成熟了,而在Web端的應用中卻一直是雞肋 在新的標準中,提供的新的WebWork API,讓前端的非同步工作變得異常簡單。 使用:建立一個Worker物件,指向一個js檔案,然後通過Worker
JAVA基礎複習(七)多執行緒和網路
1、建立執行緒和任務,如: //任務類必須實現Runnable介面 public class TaskClass implements Runnable{ ... public TaskClass(...){ ... } //想要在該執行緒執行的
關於程序,執行緒,多程序和多執行緒的網路程式設計
程序執行緒網路 多工程式設計 : 可以有效的利用計算機資源,同時執行多個任務 程序 : 程序就是程式在計算機中一次執行的過程 程序和程式的區別: 程式是一個靜態檔案的描述,不佔計算機的系統資源 程序是一個動態的過程,佔有cpu記憶體等資源,有一定的生命週期 * 同一個程式的不同執行過程即為不同的程序
多執行緒處理list
package com.zhx.web.invoice.service; import java.util.*; import java.util.concurrent.Callable; import java.util.concurrent.ExecutorService; import
python 多執行緒處理佇列
轉載自: https://blog.csdn.net/u011655220/article/details/79037032 from threading import Thread import time import random from queue import Queue from co
[SimplePlayer] 7. 多執行緒處理
在前面的文章中,我們分別實現了視訊影象解碼、播放,音訊解碼、播放,現在則需要把這些功能組合起來。總體上來說,整個程式的功能可以分為兩條線路:視訊以及音訊,兩條線之間除了後續的同步操作之外基本沒有任何關聯。而線上路當中,各個模組之間並沒有太緊密的耦合,只要上游模組提供了原料,下游模組就可以執行處理。因此,我們可
IOS儲存多張圖片 多執行緒處理
儲存多張圖片的時候,既要控制不丟圖片,又要控制圖片可以多執行緒。提高儲存速度,防止程式崩潰,防止使用者等待時間過久 這裡我們可以使用Photos框架的PHPhotoLibrary類,這個可以幫助你多執行緒儲存圖片 -(void)saveBtn { [SSGOTools againRe
通過多執行緒處理提高Redis效能
Redis通常被稱為單程序單執行緒模型。 這不是真的! Redis還執行多個後端執行緒來執行後端清理工作,例如清理髒資料和關閉檔案描述符。在Redis中,主執行緒負責主要任務,包括但不限於:接收來自客戶端的連線,處理連線讀/寫事件,解析請求,處理命令,處理定時器事件和同步資料。只有一個CPU核心執行單個程
python 多執行緒處理IO操作
from threading import Thread 方法1 t = Thread(target=func, args=(1,)) t.start() 方法2 clasee MyT
Python下的多執行緒處理
########多執行緒######### ## 執行緒的概念與多執行緒的引入 一個標準的執行緒由執行緒ID,當前指令指標(PC),暫存器集合和堆疊組成。另外,執行緒是程序中的一個實體,一個程序裡面必然會有一個主執行緒,是被系統獨立排程和分派的基本
Unity 編輯器下多執行緒處理檔案
原因 在unity編輯器下打算用多執行緒來查詢處理裡面的資源,但又想阻塞主執行緒,防止使用者操作unity,又能準確顯示多執行緒的進度。在分析unity編輯器的使用多執行緒示例後,發現可以用 ManualResetEvent 訊號來通知主執行緒。 解決 主執行緒阻塞掉,
MFC,STL,多執行緒,網路通訊,linux,泛型,IO
1 C++介面庫 2 MFC入門教程 3 C++筆記——第一個MFC程式 4 STL運用的C++技術——後記 5 C++ STL庫使用注意點 6 C++ STL 一般總結 7 C++中STL用法總結 8 c++ STL 9
Deepin學習筆記---如何多執行緒下載網路檔案
**** 命令列下載網路檔案* 當時看到師兄用多執行緒下載一個檔案,簡直帥呆了,然後自己偷摸學習了一下,很爽,這邊推薦兩個命令列下載網路檔案的方法,前提是要有下載連結哦! 一、 1.wget下載方式 wget http://www.linuxsense.or
javaSE (四十)網路程式設計(TCP傳輸、伺服器多執行緒、網路程式設計練習:反轉字串、上傳檔案)
1、TCP傳輸: 1.客戶端 建立Socket連結服務端(指定ip地址,埠號),通過ip地址找到對應的伺服器 呼叫Socket的getInputStream和getOutputStream方法獲取和伺服器端相連的IO流 2.伺服器端 建立Se