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)簽的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-05-05數(shù)據(jù)挖掘之Apriori算法詳解和Python實現(xiàn)代碼分享
這篇文章主要介紹了數(shù)據(jù)挖掘之Apriori算法詳解和Python實現(xiàn)代碼分享,本文先是對Apriori算法做了詳細(xì)介紹,然后給出了Python版實現(xiàn)代碼,需要的朋友可以參考下2014-11-11python里使用正則的findall函數(shù)的實例詳解
這篇文章主要介紹了python里使用正則的findall函數(shù)的實例詳解的相關(guān)資料,希望通過本文能幫助到大家,需要的朋友可以參考下2017-10-10python pyautogui實現(xiàn)圖片識別點擊失敗后重試功能
這篇文章主要介紹了python pyautogui實現(xiàn)圖片識別點擊失敗后重試效果,本文通過實例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧2024-06-06