案例:嵌套列表元素平方運算
最近在學習多線程和隊列的應用,之前看過好多隊列和多線程的文字和課件,總是寫不出來這樣的案例。後來遇到項目實際需求後參考該案例重新對隊列和多項成結合應用有了更進一步的理解。
queue 多線程各個線程的運算的值放到一個隊列中,到主線程的時候再拿出來,以此來代替。
直接上案例:
# queue 多線程各個線程的運算的值放到一個隊列中,到主線程的時候再拿出來,以此來代替
# return的功能,因爲在線程是不能返回一個值
import time
import threading
from queue import Queue
def job(l, q):
print ("AA",l) #傳入列表中元素(第一次[1, 2, 3]
print("BB", q) #傳入隊列方法地址,暫理解爲內存地址,方便計算
q.put([i ** 2 for i in l]) ##從列表中取出單個數據進行平方運算。注意隊列方法PUT(傳入)
## 例如第一個列表[1, 2, 3]中的1,2,3
##藉此可以替換自己的函數
def multithreading(data):
print (data) ##傳入要執行運算的整體列表……
q = Queue() ##隊列實例化
threads = [] ##多線程任務初始化
for i in range(len(data)):
print ("DATE_A",data[i]) #遍歷整體列表中的元素,準備帶入隊列和多線程。
t = threading.Thread(target=job, args=(data[i], q)) #多線程傳參,
t.start() ##多線程執行。
threads.append(t) #組成多線程任務列表
for thread in threads:
thread.join()
results = []
for _ in range(len(data)):
results.append(q.get()) ##遍歷取出執行結果,追加到新列表。注意隊列GET方法,取出結果
print (results)
if __name__ == "__main__":
data = [[1, 2, 3], [4, 5, 6], [3, 4, 3], [5, 5, 5]]
multithreading(data)
執行結果如下:
[[1, 2, 3], [4, 5, 6], [3, 4, 3], [5, 5, 5]]
data [1, 2, 3]
AA [1, 2, 3]
data [4, 5, 6]
BB <queue.Queue object at 0x7f35d9935f98>
AA [4, 5, 6]
data [3, 4, 3]
BB <queue.Queue object at 0x7f35d9935f98>
AA [3, 4, 3]
data [5, 5, 5]
BB <queue.Queue object at 0x7f35d9935f98>
AA [5, 5, 5]
BB <queue.Queue object at 0x7f35d9935f98>
[[1, 4, 9], [16, 25, 36], [9, 16, 9], [25, 25, 25]]
更多簡單易懂得案例參考:
https://www.runoob.com/python3/python3-multithreading.html