Лучшая альтернатива для запуска нескольких скриптов Python / Selenium (работа с накладными расходами) - PullRequest
0 голосов
/ 22 февраля 2019

Я создал скрипт 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 сценариев параллельно, чтобы я мог загружать все данные один раз в день)

Есть ли способ запустить все идентификаторы в одном сценарии, удалив таким образомнакладные расходы?

Спасибо!

...