欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python中concurrent.futures的具體使用

 更新時間:2024年09月20日 11:50:23   作者:pumpkin84514  
concurrent.futures是Python標準庫的一部分,提供了ThreadPoolExecutor和ProcessPoolExecutor兩種執(zhí)行器,用于管理線程池和進程池,通過這些執(zhí)行器,可以簡化多線程和多進程任務(wù)的管理,提高程序執(zhí)行效率

concurrent.futures 是 Python 標準庫中用于并行編程的高級模塊,它提供了一種高級別的接口來管理線程和進程。通過這個模塊,你可以輕松地利用多線程和多進程來并行執(zhí)行任務(wù),進而提高程序的執(zhí)行效率。

1. concurrent.futures 概述

concurrent.futures 提供了兩種執(zhí)行器類型:

ThreadPoolExecutor:用于管理線程池。

ProcessPoolExecutor:用于管理進程池。

這兩種執(zhí)行器都實現(xiàn)了同樣的接口,因此你可以使用相同的代碼邏輯來管理線程和進程。

2. 核心 API

2.1 concurrent.futures.Executor

Executor 是一個抽象基類,它定義了任務(wù)提交和管理的核心接口。以下是 Executor 提供的主要方法:

submit(fn, *args, **kwargs)

  • 提交一個函數(shù)給執(zhí)行器,函數(shù)會在獨立的線程或進程中執(zhí)行。返回一個 Future 對象。
  • 場景:當你需要執(zhí)行一個后臺任務(wù)并獲取結(jié)果時使用。
from concurrent.futures import ThreadPoolExecutor

def square(n):
    return n * n

with ThreadPoolExecutor() as executor:
    future = executor.submit(square, 10)
    print(future.result())  # 輸出: 100

提交一個函數(shù)給執(zhí)行器,函數(shù)會在獨立的線程或進程中執(zhí)行。返回一個 Future 對象。

場景:當你需要執(zhí)行一個后臺任務(wù)并獲取結(jié)果時使用。

map(func, *iterables, timeout=None, chunksize=1)

  • 將一個函數(shù)應(yīng)用于一個或多個迭代器中的每個元素,并行地執(zhí)行。類似于內(nèi)置的 map() 函數(shù),但它會并行執(zhí)行。
  • 場景:當你有一組數(shù)據(jù)需要并行處理時使用。
with ThreadPoolExecutor() as executor:
    results = executor.map(square, range(10))
    print(list(results))  # 輸出: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

shutdown(wait=True, cancel_futures=False)

  • 釋放執(zhí)行器資源。如果 wait=True,則會等待所有提交的任務(wù)完成;如果 cancel_futures=True,則會取消所有未開始的任務(wù)。
  • 場景:當你需要優(yōu)雅地關(guān)閉執(zhí)行器時使用。
executor.shutdown(wait=True)

2.2 concurrent.futures.Future

Future 對象用于表示異步執(zhí)行的任務(wù)結(jié)果。以下是 Future 提供的主要方法:

result(timeout=None)

  • 獲取任務(wù)的結(jié)果,如果任務(wù)還未完成,則會等待。你可以設(shè)置一個超時時間。
  • 場景:當你需要獲取異步任務(wù)的執(zhí)行結(jié)果時使用。
result = future.result(timeout=5)  # 等待最多5秒

exception(timeout=None)

  • 如果任務(wù)拋出了異常,則返回該異常對象,否則返回 None。
  • 場景:當你想處理任務(wù)中的異常時使用。
try:
    result = future.result()
except Exception as e:
    print(f"Error occurred: {e}")

done()

  • 檢查任務(wù)是否已完成。
  • 場景:當你想知道任務(wù)是否已經(jīng)完成時使用。
if future.done():
    print("Task is completed.")

add_done_callback(fn)

  • 為 Future 對象添加一個回調(diào)函數(shù),當任務(wù)完成時會自動調(diào)用此回調(diào)。
  • 場景:當你需要在任務(wù)完成后自動觸發(fā)某些操作時使用。
def on_done(fut):
    print(f"Task done with result: {fut.result()}")

future.add_done_callback(on_done)

3. ThreadPoolExecutor 與 ProcessPoolExecutor

3.1 ThreadPoolExecutor

線程池執(zhí)行器,用于管理線程。適用于 I/O 密集型任務(wù),如文件操作、網(wǎng)絡(luò)請求等。

with ThreadPoolExecutor(max_workers=5) as executor:
    future = executor.submit(square, 10)

參數(shù)說明

max_workers:最大并發(fā)線程數(shù)。

3.2 ProcessPoolExecutor

進程池執(zhí)行器,用于管理進程。適用于 CPU 密集型任務(wù),如計算密集型操作。

from concurrent.futures import ProcessPoolExecutor

with ProcessPoolExecutor(max_workers=5) as executor:
    future = executor.submit(square, 10)

參數(shù)說明

max_workers:最大并發(fā)進程數(shù)。

4. 使用場景

4.1 I/O 密集型任務(wù)

場景:當你有多個需要等待 I/O 操作(如文件讀取、網(wǎng)絡(luò)請求)的任務(wù)時,可以使用 ThreadPoolExecutor 來并行執(zhí)行這些任務(wù),從而減少總的等待時間。

import requests

def fetch_url(url):
    response = requests.get(url)
    return response.status_code

urls = ['https://www.example.com', 'https://www.google.com', 'https://www.github.com']

with ThreadPoolExecutor(max_workers=3) as executor:
    results = executor.map(fetch_url, urls)
    print(list(results))

4.2 CPU 密集型任務(wù)

場景:當你有多個需要大量計算的任務(wù)時,可以使用 ProcessPoolExecutor 來并行執(zhí)行,從而充分利用多核 CPU 提高效率。

def fibonacci(n):
    if n <= 1:
        return n
    else:
        return fibonacci(n-1) + fibonacci(n-2)

with ProcessPoolExecutor(max_workers=3) as executor:
    results = executor.map(fibonacci, range(10, 20))
    print(list(results))

5. 總結(jié)

concurrent.futures 提供了一個方便的接口來管理多線程和多進程的并發(fā)執(zhí)行。通過理解和使用這些 API,你可以更有效地編寫并行程序,提高程序的執(zhí)行效率。在選擇使用 ThreadPoolExecutor 還是 ProcessPoolExecutor 時,應(yīng)根據(jù)任務(wù)的性質(zhì)(I/O 密集型或 CPU 密集型)來決定。

到此這篇關(guān)于python中concurrent.futures的具體使用的文章就介紹到這了,更多相關(guān)python concurrent.futures內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python機器學(xué)習創(chuàng)建基于規(guī)則聊天機器人過程示例詳解

    python機器學(xué)習創(chuàng)建基于規(guī)則聊天機器人過程示例詳解

    這篇文章主要為大家介紹了python實現(xiàn)基于規(guī)則聊天機器人的過程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步早日升職加薪
    2021-11-11
  • Python2隨機數(shù)列生成器簡單實例

    Python2隨機數(shù)列生成器簡單實例

    這篇文章主要介紹了Python2隨機數(shù)列生成器,結(jié)合簡單實例形式分析了Python基于random模塊操作隨機數(shù)的相關(guān)實現(xiàn)技巧,需要的朋友可以參考下
    2017-09-09
  • Django REST framework 限流功能的使用

    Django REST framework 限流功能的使用

    DRF常用功能的案例基本用法都有講解,關(guān)于限流(Throttling)這個功能其實在真實的業(yè)務(wù)場景中能真正用到的其實不算多。今天說這個話題其實一方面是討論功能,另一方面也是希望換個角度去審視我們的開發(fā)過程,希望大家可以在使用DRF功能的同時,也了解一下功能背后的實現(xiàn)
    2021-06-06
  • Python中django學(xué)習心得

    Python中django學(xué)習心得

    這篇文章主要介紹了Python中django Web應(yīng)用框架的學(xué)習做了總結(jié)并把心得體會寫了一下,大家一起參考下吧。
    2017-12-12
  • 解決pycharm 誤刪掉項目文件的處理方法

    解決pycharm 誤刪掉項目文件的處理方法

    今天小編就為大家分享一篇解決pycharm 誤刪掉項目文件的處理方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-10-10
  • Python生成不重復(fù)隨機值的方法

    Python生成不重復(fù)隨機值的方法

    這篇文章主要介紹了Python生成不重復(fù)隨機值的方法,實例分析了Python算法實現(xiàn)與Python自帶方法的實現(xiàn)技巧,非常簡單實用,需要的朋友可以參考下
    2015-05-05
  • xpath無法定位tbody標簽解決方法示例

    xpath無法定位tbody標簽解決方法示例

    這篇文章主要介紹了xpath無法定位tbody標簽解決方法示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-09-09
  • Python十大列表操作技巧分享

    Python十大列表操作技巧分享

    這篇文章給大家介紹了Python十大列表操作技巧分享,列表展開,降維,分塊,轉(zhuǎn)置,查找眾數(shù),判斷重復(fù)元素等十個操作技巧,并通過代碼示例給大家介紹的非常詳細,需要的朋友可以參考下
    2024-01-01
  • Selenium常見八大定位法總結(jié)

    Selenium常見八大定位法總結(jié)

    自動化最基礎(chǔ)的就屬于定位元素了,元素不會定位,基本上已經(jīng)團滅了,就不用再去考慮什么自動化了,下面這篇文章主要給大家介紹了關(guān)于Selenium常見八大定位法的相關(guān)資料,需要的朋友可以參考下
    2023-02-02
  • 詳解Python如何實現(xiàn)發(fā)送帶附件的電子郵件

    詳解Python如何實現(xiàn)發(fā)送帶附件的電子郵件

    SMTP(Simple Mail Transfer Protocol)即簡單郵件傳輸協(xié)議,它是一組用于由源地址到目的地址傳送郵件的規(guī)則,由它來控制信件的中轉(zhuǎn)方式。本文將利用SMTP實現(xiàn)發(fā)送帶附件的電子郵件,感興趣的可以了解一下
    2023-04-04

最新評論