python 使用thread多线程执行耗时代码

python 使用thread多线程执行耗时代码

1、引入所需要的包

import queue
import threading
import traceback

2、定义线程类:

class ThreadService(threading.Thread):
   def __init__(self, queue, out_dict):
       super(ThreadService, self).__init__()

       self.queue = queue
       self.out_dict = out_dict

   def run(self):
       while True:
           try:
               data = 耗时的方法(self.queue)
               self.out_dict[self.queue] = data
           except queue.Empty:
               break
           except:
               print(traceback.format_exc())
               break

   @classmethod
   def cal_thread_num(cls, task_num, per_thread_num=5, max_thread_num=200):
       if task_num <= per_thread_num:
           return 1
       return min(task_num, int(task_num / per_thread_num), max_thread_num)

3、定义调用线程类


class LoadBundleService(object):

   @classmethod
   def loard(cls, req_list):
       out_dict = {}
       path_queue = queue.Queue()
       for v in req_list:
           path_queue.put(v)

       thread_list = []
       thread_num = ThreadService.cal_thread_num(task_num=len(req_list))
       for i in range(thread_num):
           t = ThreadService(path_queue)
           thread_list.append(t)

       # 启动线程
       for t in thread_list:
           t.start()

       # 等待线程结果
       for t in thread_list:
           t.join()

       # 输出结果
       return thread_list[0].out_dict
 
posted @   痴人说梦~  阅读(190)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
点击右上角即可分享
微信分享提示