agc_assign_main.py 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. import re
  2. from common import Material, Common, Feishu
  3. from video_agc.agc_video_method import AgcVidoe
  4. import concurrent.futures
  5. import schedule
  6. import time
  7. # 记录今天已经返回的用户名
  8. returned_usernames_today = []
  9. def video_start(user_data):
  10. global returned_usernames_today
  11. user_data_mark = user_data["mark"]
  12. video_call = user_data["video_call"]
  13. mark_name = user_data['mark_name']
  14. # 开始准备执行生成视频脚本
  15. if user_data_mark is not None and user_data_mark in returned_usernames_today:
  16. Common.logger("video").info(f"视频脚本参数中的用户名 {user_data_mark} 今天已经返回过,不再启动线程。今天已经返回的用户名:{returned_usernames_today}")
  17. print(f"视频脚本参数中的用户名 {user_data_mark} 今天已经返回过,不再启动线程。")
  18. return # 如果返回了某个用户名,并且今天已经返回过,则不启动线程
  19. if video_call is not None and video_call in returned_usernames_today:
  20. print(f"视频脚本参数中的脚本{user_data_mark} 今天已经返回过,不再启动线程。")
  21. return # 如果返回了某个用户名,并且今天已经返回过,则不启动线程
  22. else:
  23. print(f"视频脚本参数{user_data}")
  24. mark = AgcVidoe.video_gs_stitching(user_data)
  25. print(f"返回用户名{mark}")
  26. if mark:
  27. Common.logger("video").info(f"返回用户名{mark}")
  28. returned_usernames_today.append(mark)
  29. zd_count = user_data["zd_count"] # 生成总条数
  30. # 总条数
  31. result = re.match(r'([^0-9]+)', user_data_mark).group()
  32. all_count = AgcVidoe.get_link_gs_count(result)
  33. if all_count >= int(zd_count):
  34. Feishu.bot('recommend', 'AGC完成通知', '今日脚本跟随视频拼接任务完成啦~', user_data_mark.split("-")[0], mark_name)
  35. # gs_name_list = Material.feishu_gs_list()
  36. # video_start(gs_name_list[0])
  37. def clear_returned_usernames():
  38. returned_usernames_today.clear()
  39. print("returned_usernames_today 已清空")
  40. # 定义定时任务
  41. def video_task():
  42. print("开始执行生成视频脚.")
  43. data = Material.feishu_gs_list()
  44. # 创建一个线程池
  45. with concurrent.futures.ThreadPoolExecutor() as executor:
  46. futures = {executor.submit(video_start, user_data): user_data for user_data in data}
  47. # 设置超时时间为20分钟
  48. timeout = 25 * 60
  49. # 等待所有任务执行完成或超时
  50. for future in concurrent.futures.as_completed(futures, timeout=timeout):
  51. try:
  52. # 获取每个任务的执行结果
  53. result = future.result()
  54. print("处理结果:", result)
  55. except concurrent.futures.TimeoutError:
  56. # 如果任务超时,则取消任务
  57. print("任务超时,已取消.")
  58. except Exception as e:
  59. print("处理任务时出现异常:", e)
  60. print("执行生成视频脚结束")
  61. # 每天0点10清空集合
  62. schedule.every().day.at("00:05").do(clear_returned_usernames)
  63. #每10分钟执行次脚本
  64. schedule.every(10).minutes.do(video_task)
  65. while True:
  66. schedule.run_pending()
  67. time.sleep(1)