Coder Social home page Coder Social logo

Comments (9)

ljtnono avatar ljtnono commented on May 22, 2024 1

cc @ljtnono 大佬有兴趣试试吗?

这两天放假忙着搬家,有时间我看看

from kubespider.

richardli1598 avatar richardli1598 commented on May 22, 2024

cc @ljtnono 大佬有兴趣试试吗?

from kubespider.

ljtnono avatar ljtnono commented on May 22, 2024

@richardli1598

还没很熟悉代码,有一些问题:
1、涉及到下载的代码是否只有core.download_trigger#download_file这个函数里面的handle_xx_download几个分支处理?
2、如果只涉及到1中的那处代码修改,那么有一个思路就是写一个通用的重试装饰器,这个实现应该简单。实现完了之后我该测试哪几种下载方式?就TORRENT、MAGNET、GENERAL这三种方式吗?

from kubespider.

qingchoulove avatar qingchoulove commented on May 22, 2024

1、downloading trigger是只有这三个分支需要处理。
2、因为每个download provider支持的下载方式都不同,最好是都覆盖一下。

现有实现core.download_trigger#download_file 会有几个调用上游,core.webhook_server.download_handlercore.pt_server.PTServer.trigger_download_taskscore.period_server.PeriodServer.run_single_provider
这几个上游core.period_server.PeriodServer.run_single_provider是有重试机制的,其余两个没有。
大佬实现时也考虑下,PeriodServerPTServer重试是否可以统一。webhook_server如果当前线程重试,会不会block请求导致上游http调用超时,还是webhook_server重试可以在客户端处理。

from kubespider.

ljtnono avatar ljtnono commented on May 22, 2024

@qingchoulove
按照我的处理,我只是在下载出现异常时进行重试。如果一个请求调用webhook_server的API超时可能是两种情况:
一种是建立连接时超时,这个是调用者需要考虑的问题,与重试无关。
还有一种就是webhook_server与客户端建立了连接,但是webhook_server迟迟没有响应给客户端导致超时。在这个下载场景中,如果连接资源服务器,资源服务器迟迟没有响应则会导致多次重试并最终导致客户端调用超时。可能会出现的场景是:webhook_server里面与资源服务器长时间无法建立连接导致多次重试超时。我看了一下代码逻辑,本身download_file就不会捕获连接超时异常。我的实现是针对某个异常进行重试,这里需求好像有点不明确。是产生连接超时时进行重试,还是对于下载中断这种情况进行重试?

from kubespider.

ljtnono avatar ljtnono commented on May 22, 2024

我的思路大概是这个样子的:

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.

ljtnono avatar ljtnono commented on May 22, 2024

@qingchoulove core.period_server.PeriodServer.run_single_provider 这个我看了半天没明白重试机制在哪?另外我这个实现应该都是统一的吧。

from kubespider.

qingchoulove avatar qingchoulove commented on May 22, 2024

PeriodServer 执行是异步化的,执行和重试都在core.period_server.PeriodServer.run_consumer
大佬的思路没问题,非常感谢大佬贡献。

from kubespider.

ljtnono avatar ljtnono commented on May 22, 2024

@qingchoulove 嗯,看明白了,有一个队列一直在重复执行。

from kubespider.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.