Оптимизация кода. Python. SQLite3

У меня есть асинхронный парсер, который парсил товары с сайта со скоростью 100 товаров в секунду. Стоило добавить 2 запроса к БД и он стал парсить по 2-3 товара в секунду. Можно ли как-то приблизиться к прошлому значению?

Запросы

    async def insert_product(self, product: tuple):
        with self.connection:
            self.cursor.execute('INSERT OR IGNORE INTO `products`(`category`, `prod_id`, `price`, `link`, `image`, `date`)'
                                'VALUES(?, ?, ?, ?, ?, ?)', product)


    async def exist_product(self, id):
        with self.connection:
            res = self.cursor.execute('SELECT * FROM `products` WHERE prod_id=?', (id, )).fetchone()
            if res is None:
                return False
            elif res is not None:
                return True

Парсер

async def get_data():
    # Получение странички из асинхронного генератора
    async for page in get_json():
        # Если страничка правильно отображена вытягиваем данные
        if page != 'false':
            for product in page['data']['products']:
                id = str(product['id'])
                price = product['salePriceU']
                category = page['category']

                link = f'https://www.wildberries.ru/catalog/{id}/detail.aspx?targetUrl=GP'
                image_link = f"https://images.wbstatic.net/c516x688/new/{id[:-4]}0000/{id}-1.jpg"
                date = datetime.datetime.today().strftime('%d/%m')

                # Печать данных
                print(f'ID: {id}\n'
                      f'Price: {int(int(price)/100)}\n'
                      f'Category: {category}\n'
                      f'Link: {link}\n'
                      f'Image: {image_link}\n'
                      f'Date: {date}\n\n')


                # Проверка
                new_product = (category, id, price, link, image_link, date, )
                if not await db.exist_product(new_product[1]):
                    # Если этого товара нет в БД, просто добавляем его
                    await db.insert_product(new_product)


async def get_json():
    # Итерация по категориям
    for i in CURL:
        # Формируем заголовки запросов и прочие данные
        category = i['category']
        headers = i['headers']

        # Итерация по страницам категории
        for page in range(1, 101):
            # Формирование URL и Headers
            if page == 1:
                headers['Referer'] = i['headers']['Referer'].replace('_replace_me_', str(page))
            else:
                headers['Referer'] = i['headers']['Referer'].replace(str(page-1), str(page))
            url = i['url'].replace('_replace_me_', str(page))

            # Запрос и получение json страницы
            response_text = await repeat_request(url, headers)

            # Если страница не пострадала возвращаем её
            if response_text:
                response_text['category'] = category
                yield response_text
            else:
                yield 'false'



async def repeat_request(url, headers, attempts=5):
    global quantity_miss, quantity_errors
    # Цикл попыток
    for attempt in range(attempts):
        # Запрос
        async with aiohttp.ClientSession() as session:
            response = await session.get(url=url, headers=headers)
            # Проверка - всё ли в порядке
            try:
                await response.json(content_type=None)
            except Exception as _ex:
                quantity_errors += 1
                print(f'Status: {response.status}')
                print(f'Response: {response}')
                print(f'[ОШИБКА] {_ex}')
                print(f'Попытка №{attempt}')
                await asyncio.sleep(attempt * 5)

                # Если ни одна из попыток не увенчалась успехом
                # Пропускаем эту страницу
                if attempt == attempts-1:
                    quantity_miss += 1
                    return False
                    break

            # Если всё хорошо останавливаем цикл и благополучно возвращаем json страницу
            else:
                return await response.json(content_type=None)
                break


async def compare_results(old_product, new_product):
    new_price = int(int(new_product[2])/100)
    old_price = int(int(old_product[3])/100)
    need_price = int(old_price * 0.2)

    if new_price <= need_price:
        return True
    else:
        return False

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