python多线程获取函数返回值

welcome to my blog

创建线程的方式有两种, 1.封装一个类, 并让该类继承threading.Thread类 2.将方法名和参数传给Thread()的构造函数;

封装成类可以获取子线程的返回值

具体例子: 用4个线程分别计算4个列表中元素的平方值

import threading
import random


class MyClass(threading.Thread):
    # woc, 子线程会共享这个res???? 原来这是python的静态变量! 666   知识点: 静态变量:在class内的,但不在class的方法内的,这就是静态变量
    # res = []

    def __init__(self, arr):
        super().__init__()
        self.arr = arr
        # 这个res绝对不能创建成静态变量!
        self.res = []

    def calPow(self):
        print('正在执行的线程:', threading.current_thread().getName())
        for i in self.arr:
            self.res.append(i*i)

    def run(self):
        self.calPow()

    def getRes(self):
        return self.res


def main():
    # 生成4个长度为5的list, 等会用4个线程分别计算这4个list中元素的平方
    arrs = [[random.randint(1, 15) for x in range(5)] for x in range(4)]
    jobs = []
    print('\n打印4个list:')
    for i in range(4):
        print(arrs[i])

    # 使用4个线程
    print('\n调用4个子线程:')
    for i in range(4):
        t = MyClass(arrs[i])
        jobs.append(t)
        t.start()
    result = []
    # 获取每个线程的结果
    print('\n获取每个线程的结果')
    for t in jobs:
        # 等待子线程完成
        t.join()
        # 获取子线程的结果
        result.append(t.getRes())
    print('\n打印最终结果:')
    for i in result:
        print(i)


if __name__ == '__main__':
    main()

基础知识, 写这个小例子时发现了自己的知识漏洞

python中的4中变量类型,原文链接
1、全局变量:在模块内、在所有函数外面、在class外面,这就是全局变量。
2、局部变量:在函数内、在class的方法内(未加self修饰的) ,这就是局部变量
3、静态变量:在class内的,但不在class的方法内的,这就是静态变量
4、实例变量:在class的方法内的,用self修饰的变量,这就是实例变量

你可能感兴趣的:(Python)