Я создал скрипт Python, который использует Selenium для сохранения данных с определенных страниц веб-сайта, сценарии в основном обращаются к веб-сайту, вводят идентификатор в форму и затем загружают результаты.Вот основной код:
import os, time
from database import id ## This array contain 30000 different IDs
from scrapper import Scrapper ## This Class do the magic
start = os.environ["START"] ## Starting ID, eg: 4500
end = os.environ["END"] ## Ending ID, eg: 6000
def main(id):
drive.open(WEBSITE_URI) ## Open the website
drive.insert(id) ## Insert id into the fields
a, b, c = drive.download() ## Download the data into a, b and c
return a, b, c
if __name__ == "__main__":
drive = Scrapper(HEADLESS) ## Start Firefox in Headless mode
while start <= end:
x, y, z = main(id[i], scrap)
print(x, y, z)
i += 1
finally:
drive.browser.close()
drive.browser.quit()
Для каждого цикла цикла (около ~ 1500 циклов за 24 часа) требуется минута, а для прохождения всех 30 000 идентификаторов потребуется 20 дней!
Таким образом, мой обходной путь состоял в том, чтобы запустить этот сценарий несколько раз, всегда меняя переменные os.environ перед его запуском, чтобы при каждом запуске обрабатывать разные идентификаторы.
Проблема заключается в том, что для каждого запущенного скрипта также имеется собственный работающий Firefox (4 процесса, основной и 3 дочерних), потребляющий около 1 ГБ ОЗУ и 10% ЦП каждый, что ограничивает максимальное количество скриптов, равное 10.может работать параллельно (мне нужно было бы запустить как минимум 20 сценариев параллельно, чтобы я мог загружать все данные один раз в день)
Есть ли способ запустить все идентификаторы в одном сценарии, удалив таким образомнакладные расходы?
Спасибо!