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)