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

python多線程如何獲取有序結(jié)果

 更新時間:2024年09月10日 08:34:36   作者:我是誰,我在哪,我在干啥  
在Python中,多線程編程是一個常見需求,尤其是在處理I/O密集型任務(wù)時,然而,多線程環(huán)境下保持任務(wù)執(zhí)行結(jié)果的順序通常較為復(fù)雜,為了解決這一問題,可以通過封裝一個功能來確保即使在多線程環(huán)境下,任務(wù)的執(zhí)行結(jié)果也能按照一定的順序進(jìn)行收集和處理

python多線程獲取有序結(jié)果

功能封裝

import threading

class MyThread(threading.Thread):
    def __init__(self, func, args, name=''):
        threading.Thread.__init__(self)
        self.name = name
        self.func = func
        self.args = args
        
    def run(self):
        self.result = self.func(*self.args)
        
    def get_result(self):
        try:
            return self.result
        except Exception:
            return None

執(zhí)行

def main():
    threads = []
    nloops = 函數(shù)列表
    for i in nloops:
        t = MyThread(函數(shù), (參數(shù),))
        threads.append(t)
    for i in threads :   # start threads 此處并不會執(zhí)行線程,而是將任務(wù)分發(fā)到每個線程,同步線程。等同步完成后再開始執(zhí)行start方法
        i.start()
    results= []
    for i in threads:   # jion()方法等待線程完成
        i.join()
        results.append(i.get_result())  # 獲取所有結(jié)果列表
    print(threads[1].get_result())  # 獲取其中一個結(jié)果

python同步應(yīng)用:多個線程有序執(zhí)行

可以使用互斥鎖完成多個任務(wù),有序的進(jìn)程工作,這就是線程的同步

from threading import Thread, Lock
import time
mutex1= Lock()  # 創(chuàng)建一個互斥鎖
mutex2= Lock()  # 創(chuàng)建一個互斥鎖
mutex3= Lock()  # 創(chuàng)建一個互斥鎖
 
 
def fun1():
    while 1:
        mutex1.acquire()  # 阻塞
        print("線程1 執(zhí)行")
        mutex2.release()   # 釋放鎖2,讓線程2繼續(xù)執(zhí)行
        time.sleep(0.1)
 
 
def fun2():
    while 1:
        mutex2.acquire()  # 阻塞
        print("線程2 執(zhí)行")
        mutex3.release()   # 釋放鎖3,讓線程3繼續(xù)執(zhí)行
        time.sleep(0.1)
 
 
def fun3():
    while 1:
        mutex3.acquire()  # 阻塞
        print("線程3 執(zhí)行")
        mutex1.release()   # 釋放鎖1,讓線程1繼續(xù)執(zhí)行
        time.sleep(0.1)
 
t1 =Thread(target=fun1)  # 創(chuàng)建一個線程對象
t2 =Thread(target=fun2)  # 創(chuàng)建一個線程對象
t3 =Thread(target=fun3)  # 創(chuàng)建一個線程對象
 
mutex2.acquire()  # 將鎖2設(shè)置為上鎖,線程2不能運行
mutex3.acquire()  # 將鎖2設(shè)置為上鎖,線程2不能運行
 
t1.start()  # 開啟線程的執(zhí)行
t2.start()
t3.start()
 
t1.join()  # 回收線程資源
t2.join()
t3.join()

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • python 實現(xiàn)添加標(biāo)簽&打標(biāo)簽的操作

    python 實現(xiàn)添加標(biāo)簽&打標(biāo)簽的操作

    這篇文章主要介紹了python 實現(xiàn)添加標(biāo)簽&打標(biāo)簽的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-05-05
  • 解決python虛擬環(huán)境切換無效的問題

    解決python虛擬環(huán)境切換無效的問題

    這篇文章主要介紹了解決python虛擬環(huán)境切換無效的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04
  • 這三個好用的python函數(shù)你不能不知道!

    這三個好用的python函數(shù)你不能不知道!

    作為21世紀(jì)最流行的語言之一,Python當(dāng)然有很多有趣的功能值得深入探索和研究.今天通過理論和實際例子來討論,需要的朋友可以參考下
    2021-06-06
  • 數(shù)據(jù)挖掘之Apriori算法詳解和Python實現(xiàn)代碼分享

    數(shù)據(jù)挖掘之Apriori算法詳解和Python實現(xiàn)代碼分享

    這篇文章主要介紹了數(shù)據(jù)挖掘之Apriori算法詳解和Python實現(xiàn)代碼分享,本文先是對Apriori算法做了詳細(xì)介紹,然后給出了Python版實現(xiàn)代碼,需要的朋友可以參考下
    2014-11-11
  • python文件寫入write()的操作

    python文件寫入write()的操作

    這篇文章主要介紹了python文件寫入write()的操作,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • python里使用正則的findall函數(shù)的實例詳解

    python里使用正則的findall函數(shù)的實例詳解

    這篇文章主要介紹了python里使用正則的findall函數(shù)的實例詳解的相關(guān)資料,希望通過本文能幫助到大家,需要的朋友可以參考下
    2017-10-10
  • python3.6?print同一行覆蓋打印方式

    python3.6?print同一行覆蓋打印方式

    這篇文章主要介紹了python3.6?print同一行覆蓋打印方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • python pyautogui實現(xiàn)圖片識別點擊失敗后重試功能

    python pyautogui實現(xiàn)圖片識別點擊失敗后重試功能

    這篇文章主要介紹了python pyautogui實現(xiàn)圖片識別點擊失敗后重試效果,本文通過實例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2024-06-06
  • python中的yield使用方法

    python中的yield使用方法

    這篇文章主要介紹了python中的yield使用方法,需要的朋友可以參考下
    2014-02-02
  • Python爬蟲新手入門之初學(xué)lxml庫

    Python爬蟲新手入門之初學(xué)lxml庫

    這篇文章主要給大家介紹了關(guān)于Python爬蟲新手入門之初學(xué)lxml庫的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12

最新評論