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

python 線程池順序執(zhí)行的方法實(shí)現(xiàn)

 更新時(shí)間:2025年08月19日 09:08:16   作者:AI浩  
在Python中,線程池默認(rèn)是并發(fā)執(zhí)行任務(wù)的,但若需要實(shí)現(xiàn)任務(wù)的順序執(zhí)行,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

在Python中,線程池(ThreadPoolExecutor)默認(rèn)是并發(fā)執(zhí)行任務(wù)的,但若需要實(shí)現(xiàn)任務(wù)的順序執(zhí)行(按提交順序執(zhí)行或按結(jié)果順序處理),可以通過(guò)以下方案實(shí)現(xiàn):

方案一:強(qiáng)制單線程(偽順序執(zhí)行)

將線程池的最大工作線程數(shù)設(shè)為1,任務(wù)會(huì)按提交順序依次執(zhí)行(但失去了并發(fā)意義):

from concurrent.futures import ThreadPoolExecutor

def task(n):
    return f"Task {n} completed"

with ThreadPoolExecutor(max_workers=1) as executor:  # 單線程
    futures = [executor.submit(task, i) for i in range(1, 6)]
    for future in futures:
        print(future.result())

方案二:按提交順序獲取結(jié)果

保持并發(fā)執(zhí)行,但按任務(wù)提交順序獲取結(jié)果(若任務(wù)完成順序不確定):

from concurrent.futures import ThreadPoolExecutor

def task(n):
    import time, random
    time.sleep(random.uniform(0, 1))  # 模擬隨機(jī)耗時(shí)
    return f"Task {n} completed"

with ThreadPoolExecutor() as executor:
    # 提交任務(wù)并按順序存儲(chǔ) Future 對(duì)象
    futures = [executor.submit(task, i) for i in range(1, 6)]
    # 按提交順序逐個(gè)獲取結(jié)果(會(huì)阻塞直到對(duì)應(yīng)任務(wù)完成)
    for future in futures:
        print(future.result())  # 輸出順序始終是 1,2,3,4,5

方案三:任務(wù)間依賴控制

若任務(wù)需要嚴(yán)格按順序執(zhí)行(前一個(gè)任務(wù)完成后才能執(zhí)行下一個(gè)),使用同步鎖:

from concurrent.futures import ThreadPoolExecutor
import threading

lock = threading.Lock()
current_step = 0

def sequential_task(n):
    global current_step
    while True:
        with lock:
            if n == current_step + 1:
                print(f"Executing Task {n}")
                current_step = n
                break

with ThreadPoolExecutor(max_workers=5) as executor:
    executor.map(sequential_task, range(1, 6))  # 嚴(yán)格按 1→2→3→4→5 執(zhí)行

方案四:隊(duì)列順序消費(fèi)

使用隊(duì)列(Queue)控制任務(wù)執(zhí)行順序:

from concurrent.futures import ThreadPoolExecutor
import queue

def worker(q):
    while not q.empty():
        task_id = q.get()
        print(f"Processing Task {task_id}")
        q.task_done()

task_queue = queue.Queue()
for i in range(1, 6):
    task_queue.put(i)

with ThreadPoolExecutor() as executor:
    # 啟動(dòng)多個(gè)線程消費(fèi)隊(duì)列(實(shí)際按隊(duì)列順序執(zhí)行)
    for _ in range(3):  # 3個(gè)工作線程
        executor.submit(worker, task_queue)
    task_queue.join()  # 等待所有任務(wù)完成

適用場(chǎng)景總結(jié)

方案特點(diǎn)適用場(chǎng)景
單線程池簡(jiǎn)單但無(wú)并發(fā)調(diào)試或資源受限環(huán)境
順序獲取結(jié)果并發(fā)執(zhí)行,順序處理結(jié)果結(jié)果需按提交順序處理(如日志寫入)
任務(wù)間依賴鎖嚴(yán)格順序執(zhí)行任務(wù)有前后依賴關(guān)系
隊(duì)列消費(fèi)動(dòng)態(tài)任務(wù)按隊(duì)列順序執(zhí)行生產(chǎn)者-消費(fèi)者模型

根據(jù)需求選擇最合適的方法,通常方案二(順序獲取結(jié)果)能滿足大多數(shù)場(chǎng)景。

到此這篇關(guān)于python 線程池順序執(zhí)行的方法實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)python 線程池順序執(zhí)行內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 讓python 3支持mysqldb的解決方法

    讓python 3支持mysqldb的解決方法

    這篇文章主要介紹了關(guān)于讓python 3支持mysqldb的解決方法,文中給出解決的示例代碼,相信對(duì)大家具有一定的參考價(jià)值,有需要的朋友可以一起來(lái)看看。
    2017-02-02
  • Python中的各種裝飾器解析

    Python中的各種裝飾器解析

    這篇文章主要介紹了Python中的各種裝飾器解析,Python裝飾器可以在不改變函數(shù)原實(shí)現(xiàn)方式的前提下,為函數(shù)添加額外的功能,需要的朋友可以參考下
    2023-11-11
  • Django中如何使用Celery執(zhí)行異步任務(wù)

    Django中如何使用Celery執(zhí)行異步任務(wù)

    這篇文章主要介紹了Django中如何使用Celery執(zhí)行異步任務(wù)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • django中的*args 與 **kwargs使用介紹

    django中的*args 與 **kwargs使用介紹

    這篇文章主要介紹了django中的*args 與 **kwargs使用介紹,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-03-03
  • python的運(yùn)算符與表達(dá)式你真的了解嗎

    python的運(yùn)算符與表達(dá)式你真的了解嗎

    這篇文章主要為大家介紹了python的運(yùn)算符與表達(dá)式,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-01-01
  • win7上python2.7連接mysql數(shù)據(jù)庫(kù)的方法

    win7上python2.7連接mysql數(shù)據(jù)庫(kù)的方法

    這篇文章主要介紹了win7上python2.7連接mysql數(shù)據(jù)庫(kù)的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-01-01
  • 詳解python opencv、scikit-image和PIL圖像處理庫(kù)比較

    詳解python opencv、scikit-image和PIL圖像處理庫(kù)比較

    這篇文章主要介紹了詳解python opencv、scikit-image和PIL圖像處理庫(kù)比較,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • python實(shí)現(xiàn)兩個(gè)一維列表合并成一個(gè)二維列表

    python實(shí)現(xiàn)兩個(gè)一維列表合并成一個(gè)二維列表

    今天小編就為大家分享一篇python實(shí)現(xiàn)兩個(gè)一維列表合并成一個(gè)二維列表,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-12-12
  • 用pip給python安裝matplotlib庫(kù)的詳細(xì)教程

    用pip給python安裝matplotlib庫(kù)的詳細(xì)教程

    這篇文章主要介紹了用pip給python安裝matplotlib庫(kù)的詳細(xì)教程,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-02-02
  • Python列表去重的六種方法及對(duì)比詳解

    Python列表去重的六種方法及對(duì)比詳解

    在數(shù)據(jù)處理、日志分析、爬蟲去重等場(chǎng)景中,列表去重幾乎是每個(gè)開發(fā)者都會(huì)遇到的挑戰(zhàn),本文將系統(tǒng)解析6種Python列表去重方法,涵蓋基礎(chǔ)實(shí)現(xiàn)與進(jìn)階技巧,需要的朋友可以參考下
    2025-06-06

最新評(píng)論