亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

python線(xiàn)程池的四種好處總結(jié)

 更新時(shí)間:2021年04月28日 08:29:34   作者:小妮淺淺  
在本篇文章里小編給大家整理的是一篇關(guān)于python線(xiàn)程池的四種好處歸納內(nèi)容,有興趣的朋友們可以學(xué)習(xí)下。

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)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論