python線程池的四種好處總結(jié)
提高性能:由于減去了大量新建終止線程的費(fèi)用,重用了線程資源;
適用場(chǎng)景:適用于處理大量突發(fā)請(qǐng)求或需要大量線程完成任務(wù),但實(shí)際任務(wù)處理時(shí)間短。
防御功能:可以有效避免系統(tǒng)因線程過(guò)多而導(dǎo)致系統(tǒng)負(fù)載過(guò)大而相應(yīng)變慢的問(wèn)題。
代碼優(yōu)勢(shì):使用線程池的語(yǔ)法比創(chuàng)建自己的線程更簡(jiǎn)單。
2、實(shí)例'''@file : 004-線程池的使用.py@author : xiaolu@email : luxiaonlp@163.com@time : 2021-02-01'''import concurrent.futuresimport requestsfrom 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ǔ)充:
線程池的使用
線程池的基類是 concurrent.futures 模塊中的 Executor,Executor 提供了兩個(gè)子類,即 ThreadPoolExecutor 和ProcessPoolExecutor,其中 ThreadPoolExecutor 用于創(chuàng)建線程池,而 ProcessPoolExecutor 用于創(chuàng)建進(jìn)程池。
如果使用線程池/進(jìn)程池來(lái)管理并發(fā)編程,那么只要將相應(yīng)的 task 函數(shù)提交給線程池/進(jìn)程池,剩下的事情就由線程池/進(jìn)程池來(lái)搞定。
Exectuor 提供了如下常用方法:
submit(fn, *args, **kwargs):將 fn 函數(shù)提交給線程池。*args 代表傳給 fn 函數(shù)的參數(shù),*kwargs 代表以關(guān)鍵字參數(shù)的形式為 fn 函數(shù)傳入?yún)?shù)。
map(func, *iterables, timeout=None, chunksize=1):該函數(shù)類似于全局函數(shù) map(func, *iterables),只是該函數(shù)將會(huì)啟動(dòng)多個(gè)線程,以異步方式立即對(duì) iterables 執(zhí)行 map 處理。
shutdown(wait=True):關(guān)閉線程池。
程序?qū)?task 函數(shù)提交(submit)給線程池后,submit 方法會(huì)返回一個(gè) Future 對(duì)象,F(xiàn)uture 類主要用于獲取線程任務(wù)函數(shù)的返回值。由于線程任務(wù)會(huì)在新線程中以異步方式執(zhí)行,因此,線程執(zhí)行的函數(shù)相當(dāng)于一個(gè)“將來(lái)完成”的任務(wù),所以 Python 使用 Future 來(lái)代表。
到此這篇關(guān)于python線程池的四種好處總結(jié)的文章就介紹到這了,更多相關(guān)python線程池的四種好處歸納內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!
相關(guān)文章:
1. Intellij IDEA 2020.3 配置教程詳解2. idea給項(xiàng)目打war包的方法步驟3. IntelliJ IDEA刪除類的方法步驟4. IntelliJ IDEA設(shè)置編碼格式的方法5. XML入門(mén)精解之結(jié)構(gòu)與語(yǔ)法6. 兩行Javascript代碼生成UUID的方法7. 使用 kind 和 Docker 啟動(dòng)本地的 Kubernetes環(huán)境8. ASP基礎(chǔ)入門(mén)第八篇(ASP內(nèi)建對(duì)象Application和Session)9. 解決python中import文件夾下面py文件報(bào)錯(cuò)問(wèn)題10. Python importlib模塊重載使用方法詳解
