多线程调用的函数不能用 return 返回值
1. 导入线程,队列的标准模块
import threading
import time
from queue import Queue
2. 定义一个被多线程调用的函数
函数的参数是一个列表 l 和一个队列 q ,函数的功能是,对列表的每个元素进行平方计算,将结果保存在队列中
def job(l,q):
for i in range (len(l)):
l[i] = l[i]**2
q.put(l) #多线程调用的函数不能用return返回值
# Queue.put(item, [block[, timeout]]) 向队列中添加数据 ,timeout等待时间
3. 定义一个多线程函数
在多线程函数中定义一个Queue,用来保存返回值,代替return,定义一个多线程列表,初始化一个多维数据列表,用来处理:
def multithreading():
q =Queue()
threads = []
data = [[1,2,3],[3,4,5],[4,4,4],[5,5,5]]
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()) # Queue.get([block[, timeout]]) 向队列中读取数据 ,timeout等待时间
print(results)
完整代码如下:
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()
threads = []
data = [[1,2,3],[3,4,5],[4,4,4],[5,5,5]]
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)
if __name___=='__main__':
multithreading()