Ваши узкие места здесь, в основном, две вещи:
- сеть
- тот факт, что вы обрабатываете имена пользователей одно за другим синхронно, блокирующим образом . Другими словами, вы не обрабатываете следующее имя пользователя, пока не закончите с текущим.
Есть несколько простых побед, которые вы можете получить, чтобы улучшить свой текущий «синхронный» подход:
создать экземпляр requests.Session()
и повторно использовать его для сетевых запросов. Это должно значительно ускорить процесс, поскольку вы делаете запросы на один и тот же хост:
, если вы делаете несколько запросов на один и тот же хост, базовое TCP-соединение будет использовано повторно, что может привести кзначительное повышение производительности
не вызывайте is_steam_customurl_taken()
дважды за одну строку. Сделайте это один раз и запомните результат в переменную:
is_taken = is_steam_customurl_taken(username)
if is_taken:
print("%s is taken" % username)
else:
w.write(username + "\n")
print("%s is not taken" % username)
Что касается асинхронности и неблокирования, вы можете посмотреть на такие пакеты, как grequests
или Scrapy
, что позволит вам не ждать в сети и обрабатывать больше имен пользователей одновременно.