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不能運(yùn)行
mutex3.acquire() # 將鎖2設(shè)置為上鎖,線程2不能運(yùn)行
t1.start() # 開啟線程的執(zhí)行
t2.start()
t3.start()
t1.join() # 回收線程資源
t2.join()
t3.join()總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
python 實(shí)現(xiàn)添加標(biāo)簽&打標(biāo)簽的操作
這篇文章主要介紹了python 實(shí)現(xiàn)添加標(biāo)簽&打標(biāo)簽的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-05-05
數(shù)據(jù)挖掘之Apriori算法詳解和Python實(shí)現(xiàn)代碼分享
這篇文章主要介紹了數(shù)據(jù)挖掘之Apriori算法詳解和Python實(shí)現(xiàn)代碼分享,本文先是對Apriori算法做了詳細(xì)介紹,然后給出了Python版實(shí)現(xiàn)代碼,需要的朋友可以參考下2014-11-11
python里使用正則的findall函數(shù)的實(shí)例詳解
這篇文章主要介紹了python里使用正則的findall函數(shù)的實(shí)例詳解的相關(guān)資料,希望通過本文能幫助到大家,需要的朋友可以參考下2017-10-10
python pyautogui實(shí)現(xiàn)圖片識別點(diǎn)擊失敗后重試功能
這篇文章主要介紹了python pyautogui實(shí)現(xiàn)圖片識別點(diǎn)擊失敗后重試效果,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧2024-06-06

