agc_main.py 2.5 KB

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