Недавно начал изучать Пайтон, но уже есть задача, по которой необходима помощь.
Есть такая инструкция:
import socket def scan(): for i in range(254): try: addr = "10.121.11.%d" % i f = socket.gethostbyaddr(addr) print(f) except: print('no name for', addr)
Проблема заключается в том, что функция gethostbyaddr() очень долго работает, когда не может получить ответ с именем хоста от DNS. Пробовал использовать параметр timeout - не помогает.
Появилась идея использовать таймер, чтобы при каждой итерации он запускался и, если значение таймера достигает определенного времени, функция прерывалась и переходила бы к следующей итерации. Затем я выяснил, что для такой реализации необходимо использование потоков. Но пока это совсем темный лес для меня. Для таймера хочу использовать threading.Timer().
1. Подскажите, пожалуйста, как можно реализовать решение задачи максимально просто и понятно. Совсем не могу понять как при достижении Timer-ом порогового значения сказать основному потоку прервать итерацию.
2. Есть ли какой-нибудь способ решить задачу без потоков?
3. Посоветуйте, пожалуйста, материалы по мультипотоковому программированию на понимание основ “для чайников”. Пока все книги, что находил, либо просто описывают функции модулей Thread и Threading либо на азах долго не останавливаются.
Заранее благодарен за любое содействие!