Всем доброго времени суток, есть файл в 5кк ссылок, нужно получить ip каждого url , делал это через сокеты (gethostbyname) и пулом процессов , на скорости в 60 потоков обрабатывает где-то 50-70к строк в час, хотя должен в несколько раз больше, проблема оказалась в таймауте, т.е. если ссылка невалидна, то ожидание ответа очень долгое, а стандартного таймаута для этого метода не предусмотрено.
Гуглил, гуглил, еще раз гуглил, читал библиотеки и наткнулся на gevent и почти готовое решение моей задачи
Может от того, что устал или просто от банальной нехватки опыта работы с питоном, но собственно вопрос - как ограничить создание гринлетов? Просто обычный цикл для построчной работы будет читать строку, спавнить гринлет, получать ip и так для каждой строки в файле, но, повторюсь, в файле 5кк строк, памяти не хватит, а хотелось бы , чтобы определенное количество гринлетов создавалось, получало ip и переходило к следующей строке, как?
Гуглил, гуглил, еще раз гуглил, читал библиотеки и наткнулся на gevent и почти готовое решение моей задачи
Python:
>>> import gevent
>>> from gevent import socket
>>> urls = ['www.google.com', 'www.example.com', 'www.python.org']
>>> jobs = [gevent.spawn(socket.gethostbyname, url) for url in urls]
>>> gevent.joinall(jobs, timeout=2)
>>> [job.value for job in jobs]
['74.125.79.106', '208.77.188.166', '82.94.164.162']
Может от того, что устал или просто от банальной нехватки опыта работы с питоном, но собственно вопрос - как ограничить создание гринлетов? Просто обычный цикл для построчной работы будет читать строку, спавнить гринлет, получать ip и так для каждой строки в файле, но, повторюсь, в файле 5кк строк, памяти не хватит, а хотелось бы , чтобы определенное количество гринлетов создавалось, получало ip и переходило к следующей строке, как?