[小技巧]python多线程编程利用信号量限制线程最大启动数量

 1 import threading
 2 import time
 3 
 4 
 5 class MyThread(threading.Thread):
 6     semaphore_run = threading.Semaphore(100)  # 最多同时运行100个线程
 7 
 8     def start(self):  # 重载start方法
 9         MyThread.semaphore_run.acquire()  # 启动之前先取得信号量
10         try:
11             super().start()
12         except:
13             MyThread.semaphore_run.release()  # 线程启动失败时释放信号量
14 
15     def run(self):  # threading模块没有提供线程的善后处理,于是新定义_run函数执行线程任务,并在run中善后
16         try:
17             self._run()
18         finally:  # 在线程任务完成后或异常退出时释放信号量
19             MyThread.semaphore_run.release()
20 
21     def _run(self):  # 真正执行的线程任务
22         time.sleep(3)  # 假装做些什么
23 
24 
25 if __name__ == '__main__':  # 测试
26     while True:
27         task = MyThread()
28         task.start()
29         print(task)

猜你喜欢

转载自www.cnblogs.com/qyxfzmbz/p/12348276.html