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)
[小技巧]python多线程编程利用信号量限制线程最大启动数量
猜你喜欢
转载自www.cnblogs.com/qyxfzmbz/p/12348276.html
今日推荐
周排行