91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python爬蟲能夠開多少線程

發布時間:2020-11-11 09:27:35 來源:億速云 閱讀:268 作者:小新 欄目:編程語言

小編給大家分享一下python爬蟲能夠開多少線程,希望大家閱讀完這篇文章后大所收獲,下面讓我們一起去探討吧!

1、爬蟲環境

Pycharm+python3.7.0

2、進程和線程的關系:

一個線程只能屬于一個進程,而一個進程可以有多個線程,但至少有一個線程。

資源分配給進程,同一進程的所有線程共享該進程的所有資源。

CPU 分給線程,即真正在 CPU 上運行的是線程。

3、多線程通信實例

因為全局變量并不是線程安全的,比如說全局變量里(列表類型)只有一個 url 了,線程 B 判斷了一下全局變量非空,在還沒有取出該 url 之前,cpu 把時間片給了線程 C,線程 C 將最后一個url 取走了,這時 cpu 時間片又輪到了 B,B 就會因為在一個空的列表里取數據而報錯,而 queue 模塊實現了多生產者、多消費者隊列,在放值取值時是線程安全的。

4、實例代碼

import threading # 導入 threading 模塊
 
from queue import Queue #導入 queue 模塊
 
import time #導入 time 模塊
 
# 爬取文章詳情頁
 
def get_detail_html(detail_url_list, id):
 
while True:
 
url = detail_url_list.get() #Queue 隊列的 get 方法用于從隊列中提取元素
 
time.sleep(2) # 延時 2s,模擬網絡請求和爬取文章詳情的過程
 
print("thread {id}: get {url} detail finished".format(id=id,url=url)) #打印線程 id 和被爬取了文章內容的 url
 
# 爬取文章列表頁
 
def get_detail_url(queue):
 
for i in range(10000):
 
time.sleep(1) # 延時 1s,模擬比爬取文章詳情要快
 
queue.put("http://testedu.com/{id}".format(id=i))#Queue 隊列的 put 方法用于向 Queue 隊列中放置元素,由于 Queue 是先進先出隊列,所以先被 Put 的 URL 也就會被先 get 出來。
 
print("get detail url {id} end".format(id=i))#打印出得到了哪些文章的 url
 
#主函數
 
if __name__ == "__main__":
 
detail_url_queue = Queue(maxsize=1000) #用 Queue 構造一個大小為 1000 的線程安全的先進先出隊列
 
# 先創造四個線程
 
thread = threading.Thread(target=get_detail_url, args=(detail_url_queue,)) #A 線程負責抓取列表
 
url
 
html_thread= []
 
for i in range(3):
 
thread2 = threading.Thread(target=get_detail_html, args=(detail_url_queue,i))
 
html_thread.append(thread2)#B C D 線程抓取文章詳情
 
start_time = time.time()
 
# 啟動四個線程
 
thread.start()
 
for i in range(3):
 
html_thread[i].start()
 
# 等待所有線程結束,thread.join()函數代表子線程完成之前,其父進程一直處于阻塞狀態。
 
thread.join()
 
for i in range(3):
 
html_thread[i].join()
 
print("last time: {} s".format(time.time()-start_time))
 
#等 ABCD 四個線程都結束后,在主進程中計算總爬取時間。

看完了這篇文章,相信你對python爬蟲能夠開多少線程有了一定的了解,想了解更多相關知識,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

凭祥市| 吉安市| 吉木乃县| 南澳县| 上思县| 通渭县| 克拉玛依市| 剑川县| 九龙城区| 阳朔县| 六安市| 宁晋县| 贡嘎县| 天全县| 如皋市| 惠水县| 巨鹿县| 宜春市| 渭源县| 庆元县| 东安县| 丁青县| 天水市| 彭泽县| 岑巩县| 重庆市| 六枝特区| 吴桥县| 景宁| 石泉县| 简阳市| 理塘县| 莲花县| 抚顺市| 共和县| 荆州市| 建阳市| 城市| 瑞丽市| 南靖县| 延庆县|