我正在尝试编写一个程序,在一个网站上爬行并下载所有的视频。我面临的一个问题是,即使在下载完单个视频之后,线程数也在不断增加。在
下面是单个Worker对象的代码,该对象被排队,然后稍后加入。这是我生成线程的代码的唯一部分。我不明白的是,如果给定对象,我实现了self.stop()函数,while循环中断,那么怎么会有剩余的线程。在class Worker(Thread):
def __init__(self, thread_pool):
Thread.__init__(self)
self.tasks = thread_pool.tasks
self.tasks_info = thread_pool.tasks_info
self.daemon = True
self._is_running=True
self.start()
def stop(self):
self._is_running = False
def run(self):
while self._is_running:
func, args, kargs = self.tasks.get()
try: func(*args, **kargs)
except Exception:
print("\nError: Threadpool error.")
sys.exit(1)
self.tasks_info['num_tasks_complete'] += 1
self.tasks.task_done()
self.stop()
我使用线程函数来检查哪些线程是活动的,结果发现它实际上主要是工作函数以及其他名为Thread(SockThread)和{}的对象,我不知道如何关闭它们。在
请告知1。为什么工作线程没有结束和2。如何去除Thread(SockThread)以及{}。在
谢谢你!在
编辑1
^{pr2}$