python 多线程,并且返回函数方法的值

#!/usr/bin/env python
#-*- coding: utf-8 -*- 
from time import ctime, sleep
import threading
import time

loops = ['江西', '吉安']

class MyThread(threading.Thread):
    """
    重构threading方法,单独写一个获取返回值的方法,get_result
    """
    def __init__(self, func, args, name=''):
        threading.Thread.__init__(self)
        self.name = name
        self.func = func
        self.args = args

    def run(self):
        self.result = self.func(*self.args)

    def get_result(self):
        try:
            return self.result
        except Exception:
            return None


def loop(n):
    print("task", n)
    time.sleep(1)
    print('2s')
    time.sleep(1)
    print('1s')
    time.sleep(1)
    print('0s')
    time.sleep(1)
    return n


def main():
    print('start at', ctime())
    threads = []
    nloops = range(len(loops))
    for i in nloops:
        t = MyThread(loop, (loops[i],), loop.__name__)
        threads.append(t)
    for i in nloops:  # start threads 此处并不会执行线程,而是将任务分发到每个线程,同步线程。等同步完成后再开始执行start方法
        threads[i].start()
    for i in nloops:  # jion()方法等待线程完成
        threads[i].join()
    print("loop.__name__",loop.__name__)
    print(threads[1].get_result())
    print('DONE AT:', ctime())


if __name__ == '__main__':
    main()

结果

start at Wed Feb  3 18:23:29 2021
task 江西
task 吉安
2s2s

1s
1s
0s
0s
loop.__name__ loop
吉安
DONE AT: Wed Feb  3 18:23:33 2021
posted @   Mr.zou  阅读(190)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构

点击右上角即可分享
微信分享提示