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)