فهرست منبع

增加线程,线程数为3

zhangyong 10 ماه پیش
والد
کامیت
c08eca3f3b
1فایلهای تغییر یافته به همراه27 افزوده شده و 11 حذف شده
  1. 27 11
      video_rewriting/video_prep.py

+ 27 - 11
video_rewriting/video_prep.py

@@ -1,9 +1,10 @@
 import configparser
 import os
 import random
+import threading
 import time
 from datetime import datetime
-
+import concurrent.futures
 from common import Material, Feishu, Common, Oss
 from common.ffmpeg import FFmpeg
 from data_channel.douyin import DY
@@ -75,7 +76,9 @@ class getVideo:
         if len(task_data) == 0:
             Feishu.bot(mark, '机器自动改造消息通知', f'今日任务为空,请关注', name)
             return mark
-        for task in task_data:
+
+        lock = threading.Lock()
+        def process_task(task):
             task_mark = task["task_mark"]  # 任务标示
             channel_id = str(task["channel_id"])
             channel_urls = str(task["channel_url"])
@@ -132,7 +135,7 @@ class getVideo:
                         else:
                             new_video_path = Oss.download_video_oss(video_url, video_path_url, v_id)  # 下载视频地址
                         if not os.path.isfile(new_video_path):
-                            Common.logger("log").info(f"{task_mark}下的视频ID{id},{new_video_path}视频下载失败")
+                            Common.logger("log").info(f"{task_mark}下的视频{url},{new_video_path}视频下载失败")
                             cls.remove_files(video_path_url)
                             continue
                         if crop_total and crop_total != 'None':  # 判断是否需要裁剪
@@ -155,22 +158,22 @@ class getVideo:
                             for attempt in range(3):
                                 jpg_path = FFmpeg.video_png(new_video_path, video_path_url, pw_random_id)  # 生成视频最后一帧jpg
                                 if os.path.isfile(jpg_path):
-                                    Common.logger("log").info(f"{task_mark}下的视频ID{id},生成视频最后一帧成功")
+                                    Common.logger("log").info(f"{task_mark}下的视频{url},生成视频最后一帧成功")
                                     break
                                 time.sleep(1)
                             if not os.path.isfile(jpg_path):
-                                Feishu.bot(mark, '机器自动改造消息通知', f'{task_mark}任务用户ID{id}下的视频{v_id},获取视频最后一帧失败,请关注', name)
+                                Feishu.bot(mark, '机器自动改造消息通知', f'{task_mark}任务用户{url}下的视频{v_id},获取视频最后一帧失败,请关注', name)
                                 cls.remove_files(video_path_url)
                                 continue
                             for attempt in range(3):
                                 pw_mp3_path = FFmpeg.get_video_mp3(pw_url, video_path_url, pw_random_id)
                                 pw_path = FFmpeg.pw_video(jpg_path, video_path_url, pw_url, pw_srt, pw_random_id, pw_mp3_path)  # 生成片尾视频
                                 if os.path.isfile(pw_path):
-                                    Common.logger("log").info(f"{task_mark}下的视频ID{id},生成片尾视频成功")
+                                    Common.logger("log").info(f"{task_mark}下的视频{url},生成片尾视频成功")
                                     break
                                 time.sleep(1)
                             if not os.path.isfile(pw_path):
-                                Feishu.bot(mark, '机器自动改造消息通知', f'{task_mark}任务用户ID{id}下的视频{v_id},生成片尾视频失败,请关注',
+                                Feishu.bot(mark, '机器自动改造消息通知', f'{task_mark}任务用户{url}下的视频{v_id},生成片尾视频失败,请关注',
                                            name)
                                 cls.remove_files(video_path_url)
                                 continue
@@ -199,16 +202,29 @@ class getVideo:
                                 current_time = datetime.now()
                                 formatted_time = current_time.strftime("%Y-%m-%d %H:%M:%S")
                                 values = [[name, task_mark, v_id, piaoquan_id, new_title, str(code), formatted_time]]
-                                Feishu.insert_columns("ILb4sa0LahddRktnRipcu2vQnLb", "a74fc4", "ROWS", 1, 2)
-                                time.sleep(0.5)
-                                Feishu.update_values("ILb4sa0LahddRktnRipcu2vQnLb", "a74fc4", "A2:Z2", values)
+                                # 使用锁保护表格插入操作
+                                with lock:
+                                    Feishu.insert_columns("ILb4sa0LahddRktnRipcu2vQnLb", "a74fc4", "ROWS", 1, 2)
+                                    time.sleep(0.5)
+                                    Feishu.update_values("ILb4sa0LahddRktnRipcu2vQnLb", "a74fc4", "A2:Z2", values)
                             cls.remove_files(video_path_url)
                         else:
                             cls.remove_files(video_path_url)
-                            Common.logger("log").info(f"{task_mark}下的视频ID{id} 视频发送OSS失败 ")
+                            Common.logger("log").info(f"{task_mark}下的{url}视频{v_id} 视频发送OSS失败 ")
                     Feishu.bot(mark, '机器自动改造消息通知', f'{task_mark}任务改造完成,请关注', name)
                 except Exception as e:
                     cls.remove_files(video_path_url)
                     Common.logger("warning").warning(f"{name}的{task_mark}任务处理失败:{e}\n")
+
+        with concurrent.futures.ThreadPoolExecutor(max_workers=3) as executor:
+            futures = {executor.submit(process_task, task): task for task in task_data}
+            for future in concurrent.futures.as_completed(futures):
+                task = futures[future]
+                try:
+                    future.result()
+                    print(f"Task {task['task_mark']} 完成")
+                except Exception as exc:
+                    print(f"Task {task['task_mark']} 异常信息: {exc}")
+
         Feishu.bot(mark, '机器自动改造消息通知', f'你的任务全部完成,请关注!!!!!', name)
         return mark