python多線程如何獲取有序結(jié)果
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 此處并不會(huì)執(zhí)行線程,而是將任務(wù)分發(fā)到每個(gè)線程,同步線程。等同步完成后再開(kāi)始執(zhí)行start方法
i.start()
results= []
for i in threads: # jion()方法等待線程完成
i.join()
results.append(i.get_result()) # 獲取所有結(jié)果列表
print(threads[1].get_result()) # 獲取其中一個(gè)結(jié)果
python同步應(yīng)用:多個(gè)線程有序執(zhí)行
可以使用互斥鎖完成多個(gè)任務(wù),有序的進(jì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("線程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)建一個(gè)線程對(duì)象
t2 =Thread(target=fun2) # 創(chuàng)建一個(gè)線程對(duì)象
t3 =Thread(target=fun3) # 創(chuàng)建一個(gè)線程對(duì)象
mutex2.acquire() # 將鎖2設(shè)置為上鎖,線程2不能運(yùn)行
mutex3.acquire() # 將鎖2設(shè)置為上鎖,線程2不能運(yùn)行
t1.start() # 開(kāi)啟線程的執(zhí)行
t2.start()
t3.start()
t1.join() # 回收線程資源
t2.join()
t3.join()總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
使用Python將.py文件轉(zhuǎn)換為PDF并實(shí)現(xiàn)語(yǔ)法高亮
在開(kāi)發(fā)工作中,我們經(jīng)常需要分享或歸檔 Python 腳本文件,.py 文件雖然在編輯器中可讀性強(qiáng),但直接發(fā)送給他人時(shí),缺乏格式統(tǒng)一、排版美觀,且打印體驗(yàn)不佳,Python 生態(tài)中有多種方式可以實(shí)現(xiàn)代碼轉(zhuǎn) PDF,本文將介紹兩種常見(jiàn)的實(shí)現(xiàn)方法,需要的朋友可以參考下2025-12-12
Python使用微信itchat接口實(shí)現(xiàn)查看自己微信的信息功能詳解
這篇文章主要介紹了Python使用微信itchat接口實(shí)現(xiàn)查看自己微信的信息功能,結(jié)合實(shí)例形式分析了Python微信itchat模塊常見(jiàn)功能與操作技巧,需要的朋友可以參考下2019-08-08
pandas將多個(gè)dataframe以多個(gè)sheet的形式保存到一個(gè)excel文件中
這篇文章主要介紹了pandas將多個(gè)dataframe以多個(gè)sheet的形式保存到一個(gè)excel文件中,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10
python統(tǒng)計(jì)文本文件內(nèi)單詞數(shù)量的方法
這篇文章主要介紹了python統(tǒng)計(jì)文本文件內(nèi)單詞數(shù)量的方法,涉及Python針對(duì)文本文件及字符串的相關(guān)操作技巧,需要的朋友可以參考下2015-05-05
本地不用Docker用Python運(yùn)行Open?WebUI完整指南(附問(wèn)題解決)
Open WebUI是一個(gè)可擴(kuò)展、功能豐富且用戶友好的自托管 WebUI,旨在完全離線操作,這篇文章主要介紹了本地不用Docker用Python運(yùn)行Open?WebUI的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2026-02-02
Python threading.local代碼實(shí)例及原理解析
這篇文章主要介紹了Python threading.local代碼實(shí)例及原理解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-03-03
聊聊python中的load、loads實(shí)現(xiàn)反序列化的問(wèn)題
在python自動(dòng)化中,我們傳遞一些參數(shù)是需要從文件中讀取過(guò)來(lái)的,讀取過(guò)來(lái)的字典并非python對(duì)象數(shù)據(jù)類型而是string類型。本文給大家分享python中的load、loads實(shí)現(xiàn)反序列化的問(wèn)題,感興趣的朋友一起看看吧2021-10-10
使用Python按類型/名稱/日期自動(dòng)歸類5000個(gè)文件的代碼實(shí)現(xiàn)
文章介紹了使用Python自動(dòng)化文件管理方案,通過(guò)按文件類型、日期歸檔和智能重命名等功能,大幅提高了文件管理的效率和可復(fù)用性,測(cè)試結(jié)果顯示,自動(dòng)化方案相比傳統(tǒng)方法和商業(yè)軟件,耗時(shí)更短、內(nèi)存占用更低,文章還提供了詳細(xì)的代碼實(shí)現(xiàn)步驟和效率對(duì)比,需要的朋友可以參考下2026-01-01
10個(gè)頂級(jí)Python實(shí)用庫(kù)推薦
這篇文章主要推薦了10個(gè)頂級(jí)Python實(shí)用庫(kù),幫助大家更好的理解和學(xué)習(xí)實(shí)用python,感興趣的朋友可以了解下2021-03-03

