python線(xiàn)程池的四種好處總結(jié)
1、使用好處
提高性能:由于減去了大量新建終止線(xiàn)程的費(fèi)用,重用了線(xiàn)程資源;
適用場(chǎng)景:適用于處理大量突發(fā)請(qǐng)求或需要大量線(xiàn)程完成任務(wù),但實(shí)際任務(wù)處理時(shí)間短。
防御功能:可以有效避免系統(tǒng)因線(xiàn)程過(guò)多而導(dǎo)致系統(tǒng)負(fù)載過(guò)大而相應(yīng)變慢的問(wèn)題。
代碼優(yōu)勢(shì):使用線(xiàn)程池的語(yǔ)法比創(chuàng)建自己的線(xiàn)程更簡(jiǎn)單。
2、實(shí)例
""" @file : 004-線(xiàn)程池的使用.py @author : xiaolu @email : luxiaonlp@163.com @time : 2021-02-01 """ import concurrent.futures import requests from bs4 import BeautifulSoup def craw(url): # 爬取網(wǎng)頁(yè)內(nèi)容 r = requests.get(url) return r.text def parse(html): # 解析其中的內(nèi)容 soup = BeautifulSoup(html, "html.parser") links = soup.find_all("a", class_="post-item-title") return [(link["href"], link.get_text()) for link in links] # 那鏈接和標(biāo)題拿出來(lái) if __name__ == '__main__': # 待爬取的網(wǎng)頁(yè)鏈接 urls = [ "https://www.cnblogs.com/sitehome/p/{}".format(page) for page in range(1, 50 + 1) ] # craw with concurrent.futures.ThreadPoolExecutor() as pool: htmls = pool.map(craw, urls) htmls = list(zip(urls, htmls)) for url, html in htmls: print(url, len(html)) print("craw over") # parse with concurrent.futures.ThreadPoolExecutor() as pool: futures = {} for url, html in htmls: future = pool.submit(parse, html) futures[future] = url # for future, url in futures.items(): # print(url, future.result()) for future in concurrent.futures.as_completed(futures): url = futures[future] print(url, future.result())
知識(shí)點(diǎn)補(bǔ)充:
線(xiàn)程池的使用
線(xiàn)程池的基類(lèi)是 concurrent.futures 模塊中的 Executor,Executor 提供了兩個(gè)子類(lèi),即 ThreadPoolExecutor 和ProcessPoolExecutor,其中 ThreadPoolExecutor 用于創(chuàng)建線(xiàn)程池,而 ProcessPoolExecutor 用于創(chuàng)建進(jìn)程池。
如果使用線(xiàn)程池/進(jìn)程池來(lái)管理并發(fā)編程,那么只要將相應(yīng)的 task 函數(shù)提交給線(xiàn)程池/進(jìn)程池,剩下的事情就由線(xiàn)程池/進(jìn)程池來(lái)搞定。
Exectuor 提供了如下常用方法:
submit(fn, *args, **kwargs):將 fn 函數(shù)提交給線(xiàn)程池。*args 代表傳給 fn 函數(shù)的參數(shù),*kwargs 代表以關(guān)鍵字參數(shù)的形式為 fn 函數(shù)傳入?yún)?shù)。
map(func, *iterables, timeout=None, chunksize=1):該函數(shù)類(lèi)似于全局函數(shù) map(func, *iterables),只是該函數(shù)將會(huì)啟動(dòng)多個(gè)線(xiàn)程,以異步方式立即對(duì) iterables 執(zhí)行 map 處理。
shutdown(wait=True):關(guān)閉線(xiàn)程池。
程序?qū)?task 函數(shù)提交(submit)給線(xiàn)程池后,submit 方法會(huì)返回一個(gè) Future 對(duì)象,F(xiàn)uture 類(lèi)主要用于獲取線(xiàn)程任務(wù)函數(shù)的返回值。由于線(xiàn)程任務(wù)會(huì)在新線(xiàn)程中以異步方式執(zhí)行,因此,線(xiàn)程執(zhí)行的函數(shù)相當(dāng)于一個(gè)“將來(lái)完成”的任務(wù),所以 Python 使用 Future 來(lái)代表。
到此這篇關(guān)于python線(xiàn)程池的四種好處總結(jié)的文章就介紹到這了,更多相關(guān)python線(xiàn)程池的四種好處歸納內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Python 線(xiàn)程池模塊之多線(xiàn)程操作代碼
- Python爬蟲(chóng)之線(xiàn)程池的使用
- python爬蟲(chóng)線(xiàn)程池案例詳解(梨視頻短視頻爬取)
- python線(xiàn)程池 ThreadPoolExecutor 的用法示例
- 實(shí)例代碼講解Python 線(xiàn)程池
- Python 如何創(chuàng)建一個(gè)線(xiàn)程池
- python線(xiàn)程池如何使用
- 解決python ThreadPoolExecutor 線(xiàn)程池中的異常捕獲問(wèn)題
- Python定時(shí)器線(xiàn)程池原理詳解
- Python 使用threading+Queue實(shí)現(xiàn)線(xiàn)程池示例
- Python線(xiàn)程池的正確使用方法
相關(guān)文章
Pyinstaller打包Scrapy項(xiàng)目的實(shí)現(xiàn)步驟
這篇文章主要介紹了Pyinstaller打包Scrapy項(xiàng)目的實(shí)現(xiàn)步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09python多線(xiàn)程案例之多任務(wù)copy文件完整實(shí)例
這篇文章主要介紹了python多線(xiàn)程案例之多任務(wù)copy文件,結(jié)合完整實(shí)例形式分析了Python使用multiprocessing模塊實(shí)現(xiàn)基于多線(xiàn)程的文件拷貝相關(guān)操作技巧,需要的朋友可以參考下2019-10-10在Pycharm中自動(dòng)添加時(shí)間日期作者等信息的方法
今天小編就為大家分享一篇在Pycharm中自動(dòng)添加時(shí)間日期作者等信息的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-01-01Python爬取當(dāng)當(dāng)、京東、亞馬遜圖書(shū)信息代碼實(shí)例
這篇文章主要介紹了Python爬取當(dāng)當(dāng)、京東、亞馬遜圖書(shū)信息代碼實(shí)例,具有一定借鑒價(jià)值,需要的朋友可以參考下。2017-12-12python爬蟲(chóng)爬取筆趣網(wǎng)小說(shuō)網(wǎng)站過(guò)程圖解
這篇文章主要介紹了python爬蟲(chóng)爬取筆趣網(wǎng)小說(shuō)網(wǎng)站過(guò)程圖解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-11-11python簡(jiǎn)易遠(yuǎn)程控制單線(xiàn)程版
這篇文章主要為大家詳細(xì)介紹了python簡(jiǎn)易遠(yuǎn)程控制單線(xiàn)程版,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-06-06python機(jī)器學(xué)習(xí)高數(shù)篇之函數(shù)極限與導(dǎo)數(shù)
這篇文章主要介紹了python機(jī)器學(xué)習(xí)高數(shù)篇之函數(shù)極限和導(dǎo)數(shù),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-08-08