【问题标题】:How to unfreeze requests download file in python?如何在python中解冻请求下载文件?
【发布时间】:2017-06-14 12:58:29
【问题描述】:

我编写了一个从互联网下载文件的 python 脚本。但是每次我运行脚本时,我的电脑似乎都被冻结了。

代码:

response = requests.get(url, stream=True)

with open(local_filename, 'wb') as f:
     for chunk in response.iter_content(chunk_size=2048):
         if chunk:  

              f.write(chunk)

              f.flush()

我可以做些什么来加载它,这样我的电脑就不会死机?

我应该分配有限数量的内存吗?还是我应该创建一个线程来执行此操作?

任何建议将不胜感激。太棒了。

【问题讨论】:

  • 可能是您的计算机无法访问该站点,并且因为我认为 get() 是一个阻塞调用,这可能看起来像是被冻结了。你能告诉我们更多的代码吗?您是否有任何证据表明您正在访问您尝试下载的网站?
  • 好吧,python不是C。你的电脑出现死机的原因是因为你有一个非常紧密的循环,不会退出这是你的真实代码吗?
  • 为什么不在你执行你的脚本之前从shell控制你的资源,例如在linux中nice 或者cpulimit可以控制你的资源
  • 如e4c5所述,上面的代码不会退出,所以它可能只会在键盘中断后才会终止?另请参阅以下问题和答案。看起来是你想做的。 stackoverflow.com/questions/16694907/…
  • +1 表示@zwer 的答案,但如果你想加快速度,试试这个:stackoverflow.com/a/13973531/4386191

标签: python python-requests


【解决方案1】:

如果我是你,我会增加块大小并为底层 I/O 线程添加一些喘息空间,所以:

import time

response = requests.get(url, stream=True)

with open(local_filename, 'wb') as f:
    for chunk in response.iter_content(chunk_size=1024*1024):  # lets use 1 meg chunks
        if chunk:  
            f.write(chunk)
            f.flush()
        time.sleep(0.05)  # 50ms delay won't kill anyone

如果这没有帮助,那么您的系统/代码中的问题比这篇文章更深。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-17
    • 2021-08-06
    • 2021-08-21
    • 1970-01-01
    相关资源
    最近更新 更多