Ternick
@Ternick

Как завершить приложение если запущено несколько потоков?

Есть простенький скрипт который в бесконечном цикле в несколько потоков скачивает некоторые файлы.
Он принимает время за которое он должен скачать что успеет и завершиться.
Я завершаю приложение обычно простым exit() или sys.exit(), но в данном случае после выполнения этих функций скрипт продолжает 'жить' за счёт потоков.

Как бы так завершить все потоки разом ?
{Смотрел в гуглах разных и там говорится делать переменную обозначающую работать функции или нет, но ждать пока завершиться цикл и пойдёт проверка в while, ждать не хочется}
Видимо плохо объяснил:
from threading import Thread
from time import sleep

global work
work = True

def thread(my_func):
	def wrapper(*args, **kwargs):
		my_thread = Thread(target=my_func, args=args, kwargs=kwargs)
		my_thread.start()
	return wrapper

@thread
def work():
    while work:#Суть в том что пока сон не закончится проверка не будет выполнена, а иногда времени нет на то что бы ожидать пока всё это завершится
        sleep(10)# имитация бурной деятельности

def main():
    for i in range(0, 5):
        work()
    sleep(15)
    global work
    work = False

if __name__ == '__main__':
	main()
  • Вопрос задан
  • 508 просмотров
Решения вопроса 1
exibite777
@exibite777
Ведущий системный аналитик
Обычно Python-приложение не завершается, пока работает хоть один его поток. Но есть особые потоки,
которые не мешают закрытию программы и останавливается вместе с ней. Такие потоки называются
"демонами"
thread = Thread(target=task(*args,**kwargs), daemon=True)
thread.setDaemon(True/False)
thread.isDaemon()
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы