多線程—— Queue(儲存進程結果)

1.實現的功能

代碼實現功能,將數據列表中的數據傳入,使用四個線程處理,將結果保存在Queue中,線程執行完後,從Queue中獲取存儲的結果

2.導入線程,隊列的標準模塊

import threading
import time
from queue import Queue

3.定義一個被多線程調用的函數

函數的參數是一個列表l和一個隊列q,函數的功能是,對列表的每個元素進行平方計算,將結果保存在隊列中

def job(l,q):		#定義線程需要乾的工作(q是要存放計算結果的)
    for i in range (len(l)):
        l[i] = l[i]**2
    q.put(l)   #多線程調用的函數不能用return返回值

4.定義一個多線程函數

在多線程函數中定義一個Queue,用來保存返回值,代替return,定義一個多線程列表,初始化一個多維數據列表,用來處理:
在多線程函數中定義四個線程,啓動線程,將每個線程添加到多線程的列表中

def multithreading():
    q = Queue()         #實例化Queue(),在q裏面放入job的返回值來替代return這個功能
    threads = []          #把所有的線程放入threads列表中
    data = [[1,2,3],[4,5,6],[7,8,9],[10,11,12]]
    for i in range(4):			#定義四個線程
        t = threading.Thread(target=job,args=(data[i],q)##Thread首字母要大寫,被調用的job函數沒有括號,只是一個索引,參數在後面
        t.start()
        threads.append(t)	##把每個線程append到線程列表中

分別join四個線程到主線程

 for thread in threads:
        thread.join()

定義一個空的列表results,將四個線運行後保存在隊列中的結果返回給空列表results

results = []
for _ in range(4):
    results.append(q.get())  #q.get()按順序從q中拿出一個值
print(results)

5.完整代碼

import threading
import time
from queue import Queue

def job(l,q):
    for i in range(len(l)):
        l[i] = l[i] ** 2
    q.put(l)

def multithreading():
    q = Queue()         #實例化Queue(),在q裏面放入job的返回值來替代return這個功能
    threads = []          #把所有的線程放入threads列表中
    data = [[1,2,3],[4,5,6],[7,8,9],[10,11,12]]
    for i in range(4):
        t = threading.Thread(target=job,args=(data[i],q))
        t.start()
        threads.append(t)
    for thread in threads:
        thread.join()
    results = []
    for _ in range(4):
        results.append(q.get())
    print(results)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章