add upload delay

This commit is contained in:
ForgQi committed 2024-05-28 23:12:13 +08:00
1 parent 8851a0ed72
commit 4872007adc
4 files changed
+27 -54

No files matched your search

+2 -7
View File
@@ -128,16 +128,11 @@ const Global: React.FC = () => {
label="下播延迟检测(delay)"
extraText={
<div style={{ fontSize: "14px" }}>
当检测到主播下播后,延迟一定时间再次检测确认,避免特殊情况提早启动上传导致漏录。
当检测到主播下播后,延迟一定时间再次检测确认,避免特殊情况提早启动上传导致分稿件。
<br />
单位:秒
<br />
默认延迟时间为 0 秒,若没有快速上传的需求,推荐设置
5 分钟(300),或按需设置。
<br />
若设置的延迟时间超过 60
秒,则会启用分段检测机制,每隔 60
秒进行一次开播状态的检测。
默认延迟时间为 0 秒
</div>
}
placeholder="0"
+6
View File
@@ -53,3 +53,9 @@ if (3, 10, 6) > sys.version_info >= (3, 8) and platform.system() == 'Windows':
proactor_events._ProactorBasePipeTransport.__del__ = silence_event_loop_closed(
proactor_events._ProactorBasePipeTransport.__del__)
if getattr(sys, 'frozen', False) and hasattr(sys, '_MEIPASS'):
import multiprocessing
multiprocessing.freeze_support()
print('running in a PyInstaller bundle')
+8 -46
View File
@@ -291,63 +291,25 @@ class DownloadBase(ABC):
start_time = time.localtime()
# 结束时间
end_time = None
# 下播延迟检测
delay = int(config.get('delay', 0))
# 重试次数
retry_count = 0
# delay 重试次数
retry_count_delay = 0
# delay 总重试次数 向上取整
delay_all_retry_count = -(-delay // 60)
with SessionLocal() as db:
self.database_row_id = add_stream_info(db, self.fname, self.url, start_time) # 返回数据库中此行记录的 id
while True:
ret = True
while ret:
# 下载结果
ret = False
try:
ret = self.run()
except:
except Exception:
logger.warning(f'下载失败: {self.__class__.__name__} - {self.fname}', exc_info=True)
finally:
self.close()
if ret:
# 下载模式如果下载成功直接跳出
if self.is_download:
break
# 成功下载重置重试次数
retry_count = 0
retry_count_delay = 0
# 最后一次下载完成时间
end_time = time.localtime()
else:
if retry_count < 3:
retry_count += 1
logger.info(
f'获取流失败: {self.__class__.__name__} - {self.fname},重试次数 {retry_count} / 3,等待 10 秒')
time.sleep(10)
continue
# 下载模式跳过下播延迟检测
if self.is_download:
break
# 下载模式跳过下播延迟检测
if self.is_download:
break
if delay and retry_count_delay < delay_all_retry_count:
retry_count_delay += 1
if delay < 60:
logger.info(
f'下播延迟检测: {self.__class__.__name__} - {self.fname},将在 {delay} 秒后检测开播状态')
time.sleep(delay)
else:
logger.info(
f'下播延迟检测: {self.__class__.__name__} - {self.fname},每隔 60 秒检测开播状态,检测次数 {retry_count_delay} / {delay_all_retry_count}')
time.sleep(60)
continue
else:
# 未设置下播延迟检测 or 下播检测次数已到
break
# 最后一次下载完成时间
end_time = time.localtime()
self.download_cover(
time.strftime(self.gen_download_filename().encode("unicode-escape").decode(), end_time if end_time else time.localtime()
+11 -1
View File
@@ -68,6 +68,7 @@ def process(name, url):
@event_manager.register(DOWNLOADED, block='Asynchronous1')
def processed(stream_info):
name = stream_info['name']
url = stream_info['url']
# 下载后处理 上传前处理
downloaded_processor = config['streamers'].get(name, {}).get('downloaded_processor')
if downloaded_processor:
@@ -75,7 +76,7 @@ def processed(stream_info):
file_list = UploadBase.file_list(name)
processor(downloaded_processor, json.dumps({
"name": name,
"url": stream_info.get('url'),
"url": url,
"room_title": stream_info.get('title', name),
"start_time": int(time.mktime(stream_info.get('date', default_date))),
"end_time": int(time.mktime(stream_info.get('end_time', default_date))),
@@ -92,6 +93,15 @@ def process_upload(stream_info):
url_upload_count = context['url_upload_count']
# 上传开始
try:
url_status = context['PluginInfo'].url_status
# 上传延迟检测
delay = int(config.get('delay', 0))
if delay:
logger.info(f'{name} -> {url} {delay}s 后检测是否上传')
time.sleep(delay)
if url_status[url] == 1:
# 上传延迟检测,启用的话会在一段时间后检测是否存在下载任务,若存在则跳过本次上传
return logger.info(f'{name} -> {url} 存在下载任务, 跳过本次上传')
file_list = UploadBase.file_list(name)
if len(file_list) <= 0:
logger.debug("无需上传")