|
@@ -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
|