Перезапуск программы с использованием os.system для экономии памяти? - PullRequest
1 голос
/ 27 марта 2019

Я использую Python, чтобы очистить веб-сайт от конкретных ссылок или ключевых слов, и хочу отправлять запрос каждые 5 секунд. Первоначально я использовал цикл while True для отправки моих запросов каждые 5 секунд, но с каждым циклом моя программа использовала примерно на 1 МБ памяти больше, чем раньше. Если я захочу запустить свою программу на Raspberry Pi в течение нескольких дней, это довольно быстро заполнит память.

Вместо использования цикла while True, как только моя программа прошла через весь код, который я использую

os.system("python program.py")   

для перезапуска программы, то есть повторное выполнение кода снова и снова не будет занимать память и останется в среднем около 38 МБ.

Итак, мой вопрос: есть ли у меня недостаток в этом? Могут ли возникнуть какие-либо проблемы, если я хочу, чтобы мой компьютер запускал новый экземпляр программы каждые 5 секунд в течение нескольких дней?

РЕДАКТИРОВАТЬ: добавлен код

import requests
from bs4 import BeautifulSoup, SoupStrainer
import time
import os
import psutil

while True:
    url = "https://en.wikipedia.org/wiki/Main_Page"
    source = requests.get(url).text                                             
    soup = BeautifulSoup(source, 'lxml')                                        
    for link in soup.find_all("a"):                                             
        print(link.get('href'))

    time.sleep(5)
    process = psutil.Process(os.getpid())
    print(process.memory_info().rss)
    time.sleep(5)

1 Ответ

1 голос
/ 27 марта 2019

Если честно, звучит так, что программу нужно переписать. Если вы храните данные внутри себя, в которых вы не нуждаетесь (которые, судя по вашим звукам), вы должны спросить себя, почему вы это делаете. Если вам нужны эти данные, запишите их и сбросьте переменную.

Здесь может помочь некоторая ясность - т. Е. Сам код, чтобы мы могли выяснить реальную проблему.

...