Comments (9)
cc @ljtnono 大佬有兴趣试试吗?
这两天放假忙着搬家,有时间我看看
from kubespider.
cc @ljtnono 大佬有兴趣试试吗?
from kubespider.
还没很熟悉代码,有一些问题:
1、涉及到下载的代码是否只有core.download_trigger#download_file这个函数里面的handle_xx_download几个分支处理?
2、如果只涉及到1中的那处代码修改,那么有一个思路就是写一个通用的重试装饰器,这个实现应该简单。实现完了之后我该测试哪几种下载方式?就TORRENT、MAGNET、GENERAL这三种方式吗?
from kubespider.
1、downloading trigger是只有这三个分支需要处理。
2、因为每个download provider支持的下载方式都不同,最好是都覆盖一下。
现有实现core.download_trigger#download_file
会有几个调用上游,core.webhook_server.download_handler
、 core.pt_server.PTServer.trigger_download_tasks
和core.period_server.PeriodServer.run_single_provider
。
这几个上游core.period_server.PeriodServer.run_single_provider
是有重试机制的,其余两个没有。
大佬实现时也考虑下,PeriodServer
和PTServer
重试是否可以统一。webhook_server
如果当前线程重试,会不会block请求导致上游http调用超时,还是webhook_server
重试可以在客户端处理。
from kubespider.
@qingchoulove
按照我的处理,我只是在下载出现异常时进行重试。如果一个请求调用webhook_server的API超时可能是两种情况:
一种是建立连接时超时,这个是调用者需要考虑的问题,与重试无关。
还有一种就是webhook_server与客户端建立了连接,但是webhook_server迟迟没有响应给客户端导致超时。在这个下载场景中,如果连接资源服务器,资源服务器迟迟没有响应则会导致多次重试并最终导致客户端调用超时。可能会出现的场景是:webhook_server里面与资源服务器长时间无法建立连接导致多次重试超时。我看了一下代码逻辑,本身download_file就不会捕获连接超时异常。我的实现是针对某个异常进行重试,这里需求好像有点不明确。是产生连接超时时进行重试,还是对于下载中断这种情况进行重试?
from kubespider.
我的思路大概是这个样子的:
utils.helper.py:
def retry(attempt_times=3, delay=1, exception=Exception):
"""
try serval times to invoke the target method.
params:
attempt_times: The number of attempts.
delay: The time between each attempt, time unit is second.
exception: The exception to catch while invoking the method, default Exception
"""
def decorator(function):
@functools.wraps(function)
def retry_handle(*args, **kwargs):
total_attempt_times = 1
while total_attempt_times <= attempt_times:
try:
return function(*args, **kwargs)
except exception:
time.sleep(delay)
total_attempt_times += 1
return retry_handle
return decorator
core.download_trigger.py:
@retry(delay=0.3)
def handle_torrent_download(self, url: str, path: str, downloader_list: list, extra_param=None) -> TypeError:
@retry(delay=0.3)
def handle_magnet_download(self, url, path, downloader_list=None, extra_param=None) -> TypeError:
@retry(delay=0.3)
def handle_general_download(self, url, path, downloader_list=None, extra_param=None) -> TypeError:
from kubespider.
@qingchoulove core.period_server.PeriodServer.run_single_provider 这个我看了半天没明白重试机制在哪?另外我这个实现应该都是统一的吧。
from kubespider.
PeriodServer
执行是异步化的,执行和重试都在core.period_server.PeriodServer.run_consumer
。
大佬的思路没问题,非常感谢大佬贡献。
from kubespider.
@qingchoulove 嗯,看明白了,有一个队列一直在重复执行。
from kubespider.
Related Issues (20)
- feat: unlock various websites with yt-dlp and majic source provider
- bug: fix meijutt downloading
- magnet download broken HOT 3
- Add full support to Youtube ,consider youtube has many hostname,
- 请问公网访问kubespider服务配置事 HOT 2
- Maybe we can provide a gateway function for kubespider
- Add support for Onedrive file download in "Send to Kubespider" chrome plugin
- 无法使用you-getdownloader及tiktok-dlp下载器 HOT 6
- ci: Standard Version Installation Method
- feat: Support get downloading trigger from various IMS HOT 6
- Qbittorrent subcategory功能支持
- 允许自定义订阅源的刷新时间 HOT 5
- Dependency Dashboard
- docker运行后,浏览器访问404页面 HOT 4
- 自动下载B站博主更新的视频出错
- 文档里针对mikanime资源的说明
- 下载 alist_source_provider 中的文件失败 HOT 6
- Add some documentation about how to define provider.yaml
- chrome插件能否支持发送剪切板中的磁链 HOT 8
- Chrome plugin not works fine HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from kubespider.