python多線(xiàn)程如何獲取有序結(jié)果
python多線(xiàn)程獲取有序結(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 此處并不會(huì)執(zhí)行線(xiàn)程,而是將任務(wù)分發(fā)到每個(gè)線(xiàn)程,同步線(xiàn)程。等同步完成后再開(kāi)始執(zhí)行start方法
i.start()
results= []
for i in threads: # jion()方法等待線(xiàn)程完成
i.join()
results.append(i.get_result()) # 獲取所有結(jié)果列表
print(threads[1].get_result()) # 獲取其中一個(gè)結(jié)果
python同步應(yīng)用:多個(gè)線(xiàn)程有序執(zhí)行
可以使用互斥鎖完成多個(gè)任務(wù),有序的進(jìn)程工作,這就是線(xiàn)程的同步
from threading import Thread, Lock
import time
mutex1= Lock() # 創(chuàng)建一個(gè)互斥鎖
mutex2= Lock() # 創(chuàng)建一個(gè)互斥鎖
mutex3= Lock() # 創(chuàng)建一個(gè)互斥鎖
def fun1():
while 1:
mutex1.acquire() # 阻塞
print("線(xiàn)程1 執(zhí)行")
mutex2.release() # 釋放鎖2,讓線(xiàn)程2繼續(xù)執(zhí)行
time.sleep(0.1)
def fun2():
while 1:
mutex2.acquire() # 阻塞
print("線(xiàn)程2 執(zhí)行")
mutex3.release() # 釋放鎖3,讓線(xiàn)程3繼續(xù)執(zhí)行
time.sleep(0.1)
def fun3():
while 1:
mutex3.acquire() # 阻塞
print("線(xiàn)程3 執(zhí)行")
mutex1.release() # 釋放鎖1,讓線(xiàn)程1繼續(xù)執(zhí)行
time.sleep(0.1)
t1 =Thread(target=fun1) # 創(chuàng)建一個(gè)線(xiàn)程對(duì)象
t2 =Thread(target=fun2) # 創(chuàng)建一個(gè)線(xiàn)程對(duì)象
t3 =Thread(target=fun3) # 創(chuàng)建一個(gè)線(xiàn)程對(duì)象
mutex2.acquire() # 將鎖2設(shè)置為上鎖,線(xiàn)程2不能運(yùn)行
mutex3.acquire() # 將鎖2設(shè)置為上鎖,線(xiàn)程2不能運(yùn)行
t1.start() # 開(kāi)啟線(xiàn)程的執(zhí)行
t2.start()
t3.start()
t1.join() # 回收線(xiàn)程資源
t2.join()
t3.join()總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
python 實(shí)現(xiàn)添加標(biāo)簽&打標(biāo)簽的操作
這篇文章主要介紹了python 實(shí)現(xiàn)添加標(biāo)簽&打標(biāo)簽的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-05-05
解決python虛擬環(huán)境切換無(wú)效的問(wèn)題
這篇文章主要介紹了解決python虛擬環(huán)境切換無(wú)效的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-04-04
這三個(gè)好用的python函數(shù)你不能不知道!
作為21世紀(jì)最流行的語(yǔ)言之一,Python當(dāng)然有很多有趣的功能值得深入探索和研究.今天通過(guò)理論和實(shí)際例子來(lái)討論,需要的朋友可以參考下2021-06-06
數(shù)據(jù)挖掘之Apriori算法詳解和Python實(shí)現(xiàn)代碼分享
這篇文章主要介紹了數(shù)據(jù)挖掘之Apriori算法詳解和Python實(shí)現(xiàn)代碼分享,本文先是對(duì)Apriori算法做了詳細(xì)介紹,然后給出了Python版實(shí)現(xiàn)代碼,需要的朋友可以參考下2014-11-11
python里使用正則的findall函數(shù)的實(shí)例詳解
這篇文章主要介紹了python里使用正則的findall函數(shù)的實(shí)例詳解的相關(guān)資料,希望通過(guò)本文能幫助到大家,需要的朋友可以參考下2017-10-10
python pyautogui實(shí)現(xiàn)圖片識(shí)別點(diǎn)擊失敗后重試功能
這篇文章主要介紹了python pyautogui實(shí)現(xiàn)圖片識(shí)別點(diǎn)擊失敗后重試效果,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧2024-06-06
Python爬蟲(chóng)新手入門(mén)之初學(xué)lxml庫(kù)
這篇文章主要給大家介紹了關(guān)于Python爬蟲(chóng)新手入門(mén)之初學(xué)lxml庫(kù)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12

