После просмотра документов и нескольких других ресурсов я обнаружил, что потоки закрылись должным образом, но функция queue.join () блокировалась до тех пор, пока очередь не была очищена.Поскольку этого не произойдет, если потоки будут уничтожены до завершения всех элементов очереди, сценарий продолжит выполняться.
Итак, я переопределил queue.join (), чтобы он выглядел так:
queue = queue.Queue()
def waiter(queue):
while not queue.empty() and dead == False:
pass
queue.join = waiter
Переменная 'dead' доступна в потоке, если она устанавливает, что условие закрытия выполнено.В приведенном выше коде вместо «len (self.working_proxies) <5» в цикле while функции run () будет помещено «dead».Каждый раз, когда новый элемент добавляется к self.working_proxies, сценарий должен проверять, выполнено ли условие для завершения, и, если это так, установить для «dead» значение True. </p>
Кроме того, «dead» являетсяглобальная переменная, поэтому ее не нужно передавать в новую функцию waiter ().
Я уверен, что есть более элегантный способ решения проблемы, но пока что этот должен помочь..