import re from common import Material, Common, Feishu from video_agc.agc_video_method import AgcVidoe import concurrent.futures import schedule import time # 记录今天已经返回的用户名 returned_usernames_today = [] def video_start(user_data): global returned_usernames_today user_data_mark = user_data["mark"] video_call = user_data["video_call"] mark_name = user_data['mark_name'] # 开始准备执行生成视频脚本 if user_data_mark is not None and user_data_mark in returned_usernames_today: Common.logger("video").info(f"视频脚本参数中的用户名 {user_data_mark} 今天已经返回过,不再启动线程。今天已经返回的用户名:{returned_usernames_today}") print(f"视频脚本参数中的用户名 {user_data_mark} 今天已经返回过,不再启动线程。") return # 如果返回了某个用户名,并且今天已经返回过,则不启动线程 if video_call is not None and video_call in returned_usernames_today: print(f"视频脚本参数中的脚本{user_data_mark} 今天已经返回过,不再启动线程。") return # 如果返回了某个用户名,并且今天已经返回过,则不启动线程 else: print(f"视频脚本参数{user_data}") mark = AgcVidoe.video_gs_stitching(user_data) print(f"返回用户名{mark}") if mark: Common.logger("video").info(f"返回用户名{mark}") returned_usernames_today.append(mark) zd_count = user_data["zd_count"] # 生成总条数 # 总条数 result = re.match(r'([^0-9]+)', user_data_mark).group() all_count = AgcVidoe.get_link_gs_count(result) if all_count >= int(zd_count): Feishu.bot('recommend', 'AGC完成通知', '今日脚本跟随视频拼接任务完成啦~', user_data_mark.split("-")[0], mark_name) # gs_name_list = Material.feishu_gs_list() # video_start(gs_name_list[0]) def clear_returned_usernames(): returned_usernames_today.clear() print("returned_usernames_today 已清空") # 定义定时任务 def video_task(): print("开始执行生成视频脚.") data = Material.feishu_gs_list() # 创建一个线程池 with concurrent.futures.ThreadPoolExecutor() as executor: futures = {executor.submit(video_start, user_data): user_data for user_data in data} # 设置超时时间为20分钟 timeout = 25 * 60 # 等待所有任务执行完成或超时 for future in concurrent.futures.as_completed(futures, timeout=timeout): try: # 获取每个任务的执行结果 result = future.result() print("处理结果:", result) except concurrent.futures.TimeoutError: # 如果任务超时,则取消任务 print("任务超时,已取消.") except Exception as e: print("处理任务时出现异常:", e) print("执行生成视频脚结束") # 每天0点10清空集合 schedule.every().day.at("00:05").do(clear_returned_usernames) #每10分钟执行次脚本 schedule.every(10).minutes.do(video_task) while True: schedule.run_pending() time.sleep(1)