V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
angel725
V2EX  ›  问与答

Python 有什么处理大量文件下载的方法

  •  
  •   angel725 · 2018-09-12 00:11:14 +08:00 · 2477 次点击
    这是一个创建于 2275 天前的主题,其中的信息可能已经有所发展或是发生改变。
    有几百个 文件。但都不大,最大的也就几兆

    我用 pycurl 下载。

    我把下载地址放到 列表 里了。

    取出第一个下载,等下完了,在取第二个。

    但问题是,几百个下载连接,pycurl 怎么判断当前文件下载完了,然后开始下一个。
    10 条回复    2018-09-12 11:25:48 +08:00
    imn1
        1
    imn1  
       2018-09-12 00:26:22 +08:00
    还不如扔 idm/wget/aria2 ……
    billlee
        2
    billlee  
       2018-09-12 00:26:54 +08:00
    如果只要一个个下载,你调 curl.perform 阻塞在那里就好了啊
    WO31400
        3
    WO31400  
       2018-09-12 00:54:06 +08:00
    为什么不直接 requests.get
    Qzier
        4
    Qzier  
       2018-09-12 01:37:51 +08:00 via iPad
    用 aiohttp+aiofiles 异步下载
    gefranks
        5
    gefranks  
       2018-09-12 01:41:45 +08:00
    我前段时候是用 requests 来下的.3 万 3 千多个几十到几百兆的文件.
    取 content-length 然后跟下下来的文件做比较.
    其实文件仍然有下坏掉的可能,所以我对重要的文件是下 2 遍,然后再去做字节的比较,我觉得下 2 次都下坏掉的几率不是非常大.
    当时也碰到会有断流停住的问题
    xmoiduts
        6
    xmoiduts  
       2018-09-12 04:22:24 +08:00 via Android
    concurrent.futures 的 map()?
    (好像现在流行 aio 什么了……看来我的方案老了,不过我东西不多这么搞也没问题过)
    noqwerty
        7
    noqwerty  
       2018-09-12 05:15:46 +08:00 via Android
    以前处理过跟你类似的问题,当时抱着学习的心写了 200 多行的 aiohttp+aiofiles,现在就只用 Python 生成链接然后全丢到 aria2 ……
    delectate
        8
    delectate  
       2018-09-12 06:45:30 +08:00
    交给 aria2,剩下的该干嘛干嘛去。
    congeec
        9
    congeec  
       2018-09-12 10:23:46 +08:00 via iPhone
    shell 脚本绝对不超过 3 行
    angel725
        10
    angel725  
    OP
       2018-09-12 11:25:48 +08:00
    重点是怎么判断 pycurl 下载完了一个文件
    若没下完,怎么让程序等待它下完。用 time.sleep 整个程序都会暂停。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3341 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 12:06 · PVG 20:06 · LAX 04:06 · JFK 07:06
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.