线程 -- 从Queue中获取存储的结果

多线程调用的函数不能用 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()

你可能感兴趣的:(线程 -- 从Queue中获取存储的结果)