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)