Возможно, будет быстрее попытаться открыть сокетное соединение с каждым портом в диапазоне, а затем попытаться сделать запрос, только если сокет действительно открыт.Но часто бывает слишком медленно перебирать кучу портов.если для каждого требуется 0,5 секунды, а вы сканируете 10000 портов, это занимает много времени.
# create an INET, STREAMing socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# now connect to the web server on port 80 - the normal http port
s.connect(("www.python.org", 80))
s.close()
из https://docs.python.org/3/howto/sockets.html
Вы также можете рассмотреть вопрос о профилировании кода и выяснении, где медленные части.