Python 脚本在几个小时后停止

Posted

技术标签:

【中文标题】Python 脚本在几个小时后停止【英文标题】:Python script stops after a few hours 【发布时间】:2019-05-09 11:39:18 【问题描述】:

我有一个 Python 3 脚本运行从 Web 下载图像的内容,但它会在几个小时后停止,我不知道为什么。 我在 .csv 文件中有 URL,它使用 csv 文件第 1 列中提供的名称保存图像。

我已经尝试关闭“打印(url)”,因为我认为这可能在某个时刻占用了太多内存,但这并没有成功。

这是我的脚本:

import csv
import requests
print ('download.py map 3_new')

with open('3.csv') as csvfile:
    csvrows = csv.reader(csvfile, delimiter=';', quotechar='"')
    for row in csvrows:
        filename = row[0]
        url = row[1]
        #print (url)
        result = requests.get(url, stream = True)
        if result.status_code == 200:
            image = result.raw.read()
            open(filename,"wb").write(image)

【问题讨论】:

【参考方案1】:

这很有可能是由于在将图像保存到硬盘后没有关闭文件造成的。尝试这样做:

import csv
import requests
print ('download.py map 3_new')

with open('3.csv') as csvfile:
    csvrows = csv.reader(csvfile, delimiter=';', quotechar='"')
    for row in csvrows:
        filename = row[0]
        url = row[1]
        #print (url)
        result = requests.get(url, stream = True)
        if result.status_code == 200:
            image = result.raw.read()
            with open(filename,"wb") as f:
                f.write(image)

【讨论】:

我会试试的,我现在正在运行命令。让我们看看它的作用。无论如何感谢您的回答! 这似乎不起作用。我运行了 6 个 python 命令,它们都执行相同的操作(第一个在 1.csv 上,第二个在 2.csv 上......等等)。目前6个中的4个还在运行,另外两个无故关闭。 URL 很好,因为当我从它停止的 URL 重新开始时,它会毫无问题地下载图像。 不知何故我不相信没有理由过早完成;)如果没有错误,那么脚本实际上可能遍历了 csv 文件中的所有 url,但由于某种原因状态代码是除了 200 并且您没有检查它,也没有尝试在失败的情况下重复下载? 我也确信提前结束一定是有原因的。老实说,我不相信脚本会遍历所有 URL,因为它会在文件的 20% 处停止,如果你在它停止的地方再次启动它,它就会像它应该的那样继续。确实,在失败的情况下我不会重复下载,但如果我将计算机与互联网断开一两分钟,然后再次连接,脚本会在它结束的地方再次继续。 好吧,无论如何,看起来您只需要添加一些错误处理。如果是关于重试建立连接urllib3.util.retry 模块可能会有所帮助。如果您遇到其他错误,请使用try/except 块以最适合您的方式处理它们(等待/重试下载/未下载的日志文件/等)

以上是关于Python 脚本在几个小时后停止的主要内容,如果未能解决你的问题,请参考以下文章

几个小时后,我的无尽后台服务自动停止。为啥?

Azure Web 应用服务在几个小时内变得不可用

几个小时过去后,Android 中的警报停止

VS2010编写的WinForm程序,在调试运行了几个小时候后弹出: 正在停止调试,但尚未完成你可以强制立即停止

pyTelegramBotAPI:机器人在 Heroku 上大约 1 小时后停止运行

Google pubsub golang 订阅者在空闲几个小时后停止接收新发布的消息