Python循环,直到达到最大数量

Python循环,直到达到最大数量,python,python-3.x,python-multithreading,Python,Python 3.x,Python Multithreading,我的工具随机停止,似乎所有线程都是“幽灵” 它是如何工作的: 刀具循环直到同时运行的最大允许螺纹数,在本例中为20。当一个线程结束时,它开始下一个线程 问题: 在这样做了一个小时之后,该工具被困在运行的20个线程中,但什么也没有发生 提前谢谢大家 maxthreadcount = 20 while True: if threading.active_count() < maxthreadcount: threading.Thread(target=Deale

我的工具随机停止,似乎所有线程都是“幽灵”

它是如何工作的: 刀具循环直到同时运行的最大允许螺纹数,在本例中为20。当一个线程结束时,它开始下一个线程

问题: 在这样做了一个小时之后,该工具被困在运行的20个线程中,但什么也没有发生

提前谢谢大家

maxthreadcount = 20
while True:
    if threading.active_count() < maxthreadcount:
            threading.Thread(target=Dealer).start()


您需要在之前创建的线程的作业(本例中为打印命令)完成后终止它们

请从以下方面查看此示例:

我认为您应该在执行
打印后调用
self.terminate()
。如下所示:

class经销商():
定义初始化(自):
self.\u running=True
def运行(自):
打印(“线程启动”)
return self.terminate()
def终止(自我):
self.\u running=False
编辑


我还相信,在这种程度上,您可以使用python的
ThreadPool
。您可以在分配的任务结束后,将线程重新用于新任务,而不是自己生成线程。

为什么不在线程时将循环设置为
。active_count()
?您的代码将继续循环并无限期地执行if语句测试。所有线程都在这样做吗?
def Dealer():
  print("thread started")
  return
class CountdownTask: 

    def __init__(self): 
        self._running = True

    def terminate(self): 
        self._running = False

    def run(self, n): 
        while self._running and n > 0: 
            print('T-minus', n) 
            n -= 1
        time.sleep(5) 

c = CountdownTask() 
t = Thread(target = c.run, args =(10, )) 
t.start() 
... 
# Signal termination 
c.terminate()  

# Wait for actual termination (if needed)  
t.join()