Не работает функция python

Делаю парсер, отслеживает удалённые винкоды на аукционе

Проблема:

Есть функция для сохранения удалённых винкодов (save_removed_vins), на её вызове в def main() код останавливается и дальше не работает.

def save_removed_vins(removed_vins, filename):
    with lock:
        try:
            existing_removed_vins = load_removed_vins(filename)

            if not removed_vins:
                logging.info("Удалённых VIN-кодов для сохранения не найдено.")
                return  # Прерываем выполнение функции

            existing_removed_vins.update(removed_vins)

            # Создаём файл, если он отсутствует
            if not os.path.exists(filename):
                logging.info(f"Файл {filename} не найден. Создаём новый файл.")

            # Сохраняем обновлённые VIN-коды в файл
            with open(filename, "w", encoding="utf-8") as f:
                json.dump(sorted(existing_removed_vins), f, ensure_ascii=False, indent=4)

            logging.info(f"Сохранено {len(existing_removed_vins)} удалённых VIN-кодов в {filename}.")
        except Exception as e:
            logging.error(f"Ошибка сохранения удалённых VIN-кодов: {e}")
def main():
    global processed_urls  # Указываем, что используем глобальное множество
    try:
        # Проверяем, существует ли файл, и создаём его, если он отсутствует
        if not os.path.exists(OUTPUT_FILE):
            with open(OUTPUT_FILE, "w", encoding="utf-8") as f:
                json.dump([], f, ensure_ascii=False, indent=4)

        # Загружаем существующие VIN-коды из файла
        existing_vins = load_from_json(OUTPUT_FILE)
        all_new_vins = set()

        # Получаем список брендов автомобилей
        brands = get_car_brands()
        if not brands:
            logging.info("Нет марок для обработки. Пропускаем текущий цикл.")
            return False  # Нет данных для обработки

        # Фильтруем бренды: Ford и Mercedes
        target_brands = ["ford", "mercedes"]
        selected_brand_urls = [url for url in brands if any(brand in url.lower() for brand in target_brands)]
        if not selected_brand_urls:
            logging.warning("Бренды Ford или Mercedes не найдены. Пропускаем текущий цикл.")
            return False

        # Обрабатываем каждую марку
        for brand_url in selected_brand_urls:
            brand_name = "Ford" if "ford" in brand_url.lower() else "Mercedes"  # Устанавливаем правильное название бренда
            logging.info(f"Начинаем обработку марки: {brand_name}")

            # Получаем все модели для текущей марки
            car_models = get_car_models(brand_url)
            if not car_models:
                logging.warning(f"Нет моделей для марки {brand_name}. Пропускаем.")
                continue

            # Фильтруем модели для Ford Focus или Mercedes
            if brand_name == "Ford":
                target_models = [model for model in car_models if "focus" in model[1].lower()]
            elif brand_name == "Mercedes":
                target_models = [model for model in car_models if "mercedes" in model[1].lower()]
            if not target_models:
                logging.warning(f"Модели для {brand_name} не найдены. Пропускаем текущий цикл.")
                continue

            # Многопоточная обработка моделей
            with ThreadPoolExecutor(max_workers=THREADS) as executor:
                for model_url, model_name in target_models:
                    logging.info(f"Начинаем парсинг для: {brand_name} {model_name}")
                    executor.submit(process_model, model_url, all_new_vins, brand_name, model_name)

        # Сравниваем старые и новые VIN-коды
        removed_vins = existing_vins - all_new_vins
        if removed_vins:
            logging.info(f"Найдено {len(removed_vins)} удалённых VIN-кодов.")
            logging.info(f"VIN-Codes: {removed_vins}")
            save_removed_vins(removed_vins, 'removed_vin.json')  # Сохраняем удалённые VIN-коды

        # Сохраняем новые VIN-коды в файл
        save_to_json(all_new_vins, OUTPUT_FILE)

        # Очищаем список обработанных URL
        processed_urls.clear()
        logging.info("Список обработанных URL очищен.")

        return True  # Успешное завершение
    except Exception as e:
        logging.error(f"Ошибка во время выполнения парсинга: {e}")
        return False

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