vps, ram, Python

Есть бот на питоне, который парсит сайт в поисках товаров. В целях ускорения, уже проверенные товары помещались в словарь товаров, которые не нужно проверять. Отсюда появилась проблема с ОЗУ. Тогда я добавил полную чистку словаря и график стал выглядеть вот так: введите сюда описание изображения

Однако, учитывая, что список становился пустым, места должно было освобождаться больше, но такого не происходило. Тогда я решил перейти на sqlite, но он не позволяет нескольким потокам разом искать нужные данные, а идея создавать новую ДБ для каждого потока меня не радовала.

Тогда я решил реализовать все через txt файл и Numpy для ускорения

db = [item1, item2, item3]
file = open('bandb.txt', 'r', encoding='utf-8')
ar = [line for line in file.readlines()]
bansarr = numpy.array([ar])
for i in db:
    if len(numpy.where(bansarr==f'{i}')[1]) > 0:
        bans.append(i)
  

В течение около 8 часов шло идеально, но после потребление ОЗУ резко выросло введите сюда описание изображенияи при повторном запуске сразу улетало в края.

Отказавшись от Numpy, ОЗУ все равно слишком быстро ползет наверх. Я бы и продолжил пользоваться самым первым вариантом, но в следующем проекте кол-во товаров вырастет в разы и никаких ресурсов тут не хватит. Пользуюсь vps от бегета, с 3 ядрами, 3гб ОЗУ и 10 нвме. Изначально этого хватало, но в попытке оптимизации, чувствуется, что не хватит абсолютно никаких ресурсов.

Пользоваться Mysql или postgres не хочу. Мне бы локальную БД, как sqlite. Вопросы следующие: Как правильно оптимизировать и чистить код? Может, проблема в бегете? Как в итоге можно организовать БД, с максимальной скоростью и стабильным потреблением ресурсов?

cleartime = datetime.datetime.now()
ban = {}

def clear():
    global ban
    global cleartime
    minustime = datetime.datetime.now() - cleartime
    if minustime > datetime.timedelta(minutes=50):
        hour = datetime.datetime.now().hour + 3
        minute = datetime.datetime.now().minute
        if hour > 10 and minute < 50:
            ban.clear()
            cleartime = datetime.datetime.now()


def checkitems(db):
    for item in db['data']:
        id = item['id']
        try:
            if ban[id]:
                continue
        except:
            pass
        # Высчитывает, выгодный ли товар
        ban[id] = True


while True:
    try:
        clear()

        req = requests.post('https://site.com').json()
        if req:
            loop = checkitems(req)
    except Exception as ex:
        print(ex)
        time.sleep(1)

Ответы (0 шт):