skavansВполне может быть. Вас не устраивает общая скорость сканирования?
eventlet по каким-то причинам получился быстрее.. ниже привожу код, который я прогонял
У вас, судя по диапазону, около 16000 адресов, которые обрабатываются за приемлемое время.
Если бы были миллионы или миллиарды, то тогда бы можно было что-то думать.
Обратите внимание:
1. тест на 1 ядре
2. замеренное время на 90% состоит из работы модуля socket, а не gevent или eventlet
Процент навскидку, просто для понимания результатов замера.
Я сейчас не могу запускать ваши тесты и/или написать свой код.
В принципе, код в части использования асинхронных библиотек - нормальный.
Для eventlet тоже можно использовать такую же конструкцию при заполнении пула, как и для gevent.
Код работы с сокетом можно чуть улучшить, но есть ли в этом смысл?
Вместо connect в случае работы с множеством сокетов лучше использовать connect_ex, который вместо исключения возвращает код ошибки.
Исключение - это довольно дорогая конструкция. при проблемах связи они будут сыпаться как из ведра и серьезно затормозят работу. Конечно не на 16000, на бОльших количествах.
Кстати, вы смотрели сколько было исключений?
Ну, и исключение для итератора режет взгляд.
Хотя эта часть менее критична, т.к. работает максимум 1 раз для каждого гринлета из пула.