Остановите поток, если функция задерживает ответ

#python #python-multithreading

Вопрос:

У меня есть следующий цикл, который вызывает функцию getHLS в отдельном потоке для каждой из текстовых строк. Проблема в том, что функция getHLS может быть очень медленной в некоторые моменты, и я ищу способ «тайм-аута» потока, если функция ничего не возвращает в течение 10 секунд.

 links = open("links.txt")
lines = links.readlines()

linenumber = 0
for line in lines:
    linenumber  = 1
    thread = threading.Thread(target = getHLS, args = (line, linenumber))
    thread.setDaemon(False)
    thread.start()
    if threading.active_count() == 50:
        thread.join(10)
 

Комментарии:

1. Здесь несколько проблем. Любой тайм-аут из-за медленной работы должен обрабатываться в getHLS . thread.setDaemon(False) является избыточным, потому что это значение по умолчанию. Не уверен, чего вы пытаетесь достичь, проверяя, работает ли ровно 50 потоков. Вполне возможно, что это условие никогда не будет выполнено. Даже если это так, вы затем ждете (присоединяетесь) к самому последнему потоку с таймаутом 10 секунд. Если время соединения истекает, вы ничего с этим не делаете