Задать вопрос
kshnkvn
@kshnkvn
yay ✌️ t.me/kshnkvn

Почему продолжает расти потребление ОЗУ?

Пример используемого кода:
def get_data(url, data, data_counter):
    r = requests.get(url)
    soup = BS(r.text, 'lxml')
    ...
    ...
    ...
    scraped_data = {
        'title': title,
        'name': name,
        'description': description,
        'image': image,
        'rating': rating,
        'category': category,
        'link': link,
        'rss': extra_data['rss'],
        'email': extra_data['email'],
        'latest_date': latest_date
    }
    for a in range(len(articles)):
        podcast_data['listener_{}'.format(a+1)] = articles[a]
    data.append(scraped_data)
    data_counter.value += 1
    print('DONE №{}: {}'.format(data_counter.value, url))


if __name__ == "__main__":
    manager = Manager()
    data = manager.list()
    data_counter = manager.Value('i', 0)
    with Pool(999) as pool:
        for url in urls:
            pool.apply_async(get_data, (url, data, data_counter))
        pool.close()
        pool.join()
    result = []
    for d in data:
        result.append(d)
    create_csv(result)
    print(len(result))

Изначально этот код запускался на VPS с 12 ЦПУ и 64ГБ ОЗУ для обработки 600,000 страниц, проработал почти 10 часов и затем в логах я увидел сообщение:
Traceback (most recent call last):
File "scrape_mp.py", line 46, in get_email
match = re.search(r'[\w\.-]+@[\w\.-]+', r.text)
File "/home/kshnkvn/.local/lib/python3.6/site-packages/requests/models.py", line 861, in text
content = str(self.content, encoding, errors='replace')
MemoryError

После этой ошибки в логах пустота, т.е. скрипт остановил работу.
Попытался подключиться по SSH к VPS - ошибка подключения, пришлось перезагружать.
Увеличил характеристики VPS до 16 ЦПУ и 102 ГБ ОЗУ, запустил скрипт, как только скрипт начал работу было свободно около 55ГБ, начал наблюдать за потреблением памяти.
За первый час ушло около 5ГБ ОЗУ, за второй час 3ГБ, за третий час 2,5ГБ и потребление памяти продолжается дальше, но вроде-бы меньше и меньше.

Собственно: на что расходуется ОЗУ и можно-ли как-то это предотвратить именно для этого кода?
  • Вопрос задан
  • 400 просмотров
Подписаться 2 Средний 7 комментариев
Решения вопроса 1
@deliro
Создавать пул на 1к процессов и удивляться, что память льётся? Ну вы, батенька, извращенец
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы