ISP的24小时断开连接将永远暂停下载

问题描述 投票:0回答:1

我的ISP每天强制一次断开连接。如果在下载期间发生这种情况,则下载将永久暂停,而不会引发任何异常。

现在,我只能想到将下载线程化,然后检查最长时间或立即读取文件大小,然后检查它是否还在增长。

我现在正在使用的功能:

def download_with_progress(url,localFileName,overwrite=False):
    if not os.path.exists(localFileName) or overwrite == True:
        urlretrieve(url, localFileName, reporthook=print_progress)
        sys.stdout.write("\r") #remove previously printed percent sign
        sys.stdout.flush()

def print_progress(count, blockSize, totalSize):
    total_MB = (totalSize) / (1000 * 1000)
    current_MB = (blockSize * count) / (1000 * 1000)
    percent = int(count*blockSize*100/totalSize)        
    sys.stdout.write("\r%d%% (%d/%d MB)" % (percent, current_MB, total_MB))
    sys.stdout.flush()

因为我已经在这里:total_MBcurrent_MB是否以这种方式正确计算?还是我应该除以1024 * 1024?我将它们显示为四舍五入的int,所以这不是真正的问题。

python urllib2 urllib disconnect
1个回答
2
投票

而不是使用urllib2,而是使用requests library;它设置requests,让您检测ISP断开连接。

您可能需要设置其他套接字选项; TCP Keep-Alive option库使用urllib3来检测套接字是否仍然可用,并设置超时,但是向套接字添加显式的KEEPALIVE选项应该会使检测更加平稳:

select
© www.soinside.com 2019 - 2024. All rights reserved.