add upload delay
This commit is contained in:
1 parent
8851a0ed72
commit
4872007adc
4 files changed
+27
-54
No files matched your search
@@ -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"
|
||||
|
||||
@@ -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')
|
||||
@@ -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
@@ -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("无需上传")
|
||||
|
||||
Reference in new issue
Block a user