|
|
@@ -410,7 +410,7 @@ class RunMain:
|
|
|
callback_func=callback_func,
|
|
|
windows=None,
|
|
|
)
|
|
|
-
|
|
|
+
|
|
|
if result:
|
|
|
logger.info(f"[重试处理] 货号 {folder_name} 重试成功 ✓")
|
|
|
callback_func(f"货号 {folder_name} 重试成功")
|
|
|
@@ -423,6 +423,7 @@ class RunMain:
|
|
|
import traceback
|
|
|
logger.error(f"[重试处理] 货号 {folder_name} 重试异常: {e}\n{traceback.format_exc()}")
|
|
|
callback_func(f"货号 {folder_name} 重试异常: {e}")
|
|
|
+ raise
|
|
|
return False
|
|
|
|
|
|
def do_run_cutout_image(
|
|
|
@@ -437,102 +438,26 @@ class RunMain:
|
|
|
config_data,
|
|
|
):
|
|
|
from logger import logger
|
|
|
-
|
|
|
+ try:
|
|
|
+ loop = asyncio.get_event_loop()
|
|
|
+ except:
|
|
|
+ loop = asyncio.new_event_loop()
|
|
|
+ executor = ThreadPoolExecutor(max_workers=10)
|
|
|
goods_arts = [
|
|
|
goods_art_no_folder_data["folder_name"]
|
|
|
for goods_art_no_folder_data in all_goods_art_no_folder_data
|
|
|
]
|
|
|
print("BaseDealImage().run_main========>>>>")
|
|
|
deal = BaseDealImage(token=self.token)
|
|
|
-
|
|
|
- # 重试机制:最多重试1次,避免死循环
|
|
|
- max_retry_count = self.MAX_RETRY_COUNT
|
|
|
- retry_count = 0
|
|
|
- is_success = False
|
|
|
- failed_folders_from_run_main = [] # 从 run_main 返回的失败货号列表
|
|
|
-
|
|
|
- while retry_count <= max_retry_count and not is_success:
|
|
|
- try:
|
|
|
- if retry_count > 0:
|
|
|
- logger.warning(f"[主流程重试] 第 {retry_count} 次重试,重新执行抠图处理")
|
|
|
- callback_func(f"处理失败,正在重试(第{retry_count}次)...")
|
|
|
-
|
|
|
- # 重试时只处理之前失败的货号
|
|
|
- if failed_folders_from_run_main:
|
|
|
- logger.info(f"[主流程重试] 将重试以下货号: {[f['folder_name'] for f in failed_folders_from_run_main]}")
|
|
|
- # 临时替换为只包含失败货号的数据
|
|
|
- retry_folders = failed_folders_from_run_main
|
|
|
- failed_folders_from_run_main = [] # 清空,准备接收新的失败列表
|
|
|
- else:
|
|
|
- retry_folders = all_goods_art_no_folder_data
|
|
|
- else:
|
|
|
- retry_folders = all_goods_art_no_folder_data
|
|
|
-
|
|
|
- # 执行主流程,获取返回结果
|
|
|
- result = deal.run_main(
|
|
|
- all_goods_art_no_folder_data=retry_folders,
|
|
|
- callback_func=callback_func,
|
|
|
- image_order_list=image_order_list,
|
|
|
- cutout_mode=cutout_mode,
|
|
|
- resize_image_view=resize_image_view,
|
|
|
- windows=windows,
|
|
|
- logo_path=logo_path,
|
|
|
- )
|
|
|
-
|
|
|
- # 检查返回结果
|
|
|
- if result and isinstance(result, dict):
|
|
|
- is_success = result.get('success', False)
|
|
|
- failed_folders_from_run_main = result.get('failed_folders', [])
|
|
|
- successful_num = result.get('successful_num', 0)
|
|
|
- error_num = result.get('error_num', 0)
|
|
|
-
|
|
|
- logger.info(f"[主流程完成] 成功: {successful_num}, 失败: {error_num}")
|
|
|
-
|
|
|
- if is_success:
|
|
|
- logger.info("[主流程完成] 所有货号处理成功 ✓")
|
|
|
- else:
|
|
|
- # 有失败的货号,需要重试
|
|
|
- retry_count += 1 # 增加重试计数
|
|
|
- logger.warning(f"[主流程完成] 有 {error_num} 个货号失败,准备重试")
|
|
|
- callback_func(f"有 {error_num} 个货号处理失败,准备重试...")
|
|
|
-
|
|
|
- if retry_count > max_retry_count:
|
|
|
- # 已达到最大重试次数
|
|
|
- logger.error(f"[主流程重试] 已达到最大重试次数 {max_retry_count},放弃重试")
|
|
|
- callback_func(f"处理失败,已重试{max_retry_count}次仍无法完成")
|
|
|
- # 不抛出异常,继续执行后置校验
|
|
|
- is_success = True # 强制退出循环,让后置校验处理
|
|
|
- else:
|
|
|
- logger.warning(f"[主流程重试] 准备第 {retry_count} 次重试,将只处理失败的货号")
|
|
|
- callback_func(f"准备重试失败的货号...")
|
|
|
- else:
|
|
|
- # 兼容旧版本,如果没有返回值则认为成功
|
|
|
- is_success = True
|
|
|
-
|
|
|
- except UnicornException as e:
|
|
|
- retry_count += 1
|
|
|
- logger.error(f"[主流程重试] 第 {retry_count} 次尝试失败: {e.msg}")
|
|
|
-
|
|
|
- if retry_count > max_retry_count:
|
|
|
- logger.error(f"[主流程重试] 已达到最大重试次数 {max_retry_count},放弃重试")
|
|
|
- callback_func(f"处理失败,已重试{max_retry_count}次仍无法完成")
|
|
|
- raise UnicornException(e.msg)
|
|
|
- else:
|
|
|
- logger.warning(f"[主流程重试] 准备第 {retry_count} 次重试")
|
|
|
- callback_func(f"处理异常,准备重试...")
|
|
|
-
|
|
|
- except Exception as e:
|
|
|
- import traceback
|
|
|
- retry_count += 1
|
|
|
- logger.error(f"[主流程重试] 第 {retry_count} 次尝试异常: {e}\n{traceback.format_exc()}")
|
|
|
-
|
|
|
- if retry_count > max_retry_count:
|
|
|
- logger.error(f"[主流程重试] 已达到最大重试次数 {max_retry_count},放弃重试")
|
|
|
- callback_func(f"处理异常,已重试{max_retry_count}次仍无法完成")
|
|
|
- raise UnicornException(e)
|
|
|
- else:
|
|
|
- logger.warning(f"[主流程重试] 准备第 {retry_count} 次重试")
|
|
|
- callback_func(f"处理异常,准备重试...")
|
|
|
+ deal.run_main(
|
|
|
+ all_goods_art_no_folder_data=all_goods_art_no_folder_data,
|
|
|
+ callback_func=callback_func,
|
|
|
+ image_order_list=image_order_list,
|
|
|
+ cutout_mode=cutout_mode,
|
|
|
+ resize_image_view=resize_image_view,
|
|
|
+ windows=windows,
|
|
|
+ logo_path=logo_path,
|
|
|
+ )
|
|
|
|
|
|
# ========== 后置校验:检查所有货号的目录完整性 ==========
|
|
|
logger.info("=" * 50)
|