Тупик / заморозка с помощью shutil.copyfileobj - PullRequest
0 голосов
/ 15 апреля 2020

Я запускаю Python скрипт, который иногда зависает. Он будет работать часами, а потом просто застрянет. Когда он застрял, я не могу прервать его в командной строке windows с помощью Ctrl + c или чего-либо подобного.

Вот соответствующий код:

while True:
    # do stuff

    link = getLink() # code to get link not relevant, returns "direct_link_to_image_on_web.jpg"
    raw_img = requests.get(link,stream=True)

    with open(IMG_DIR, 'wb') as out_file:
        shutil.copyfileobj(raw_img.raw, out_file)

    # do other stuff

    time.sleep(90)

После использования распечаток Я обнаружил, что после ~ 24 часов загрузки изображения каждые 1,5 минуты оно застревает на линии с shutil.copyfileobj. Это никогда не проходит через эту строку, скрипт просто зависает.

Я посмотрел на изображение в out_file, на которое этот код пытался записать новое изображение, пока скрипт еще висел. Вот оно:

failed image download

Скриншот того, как это выглядит, открывая его локально:

viewing of failed written image

Я попытаюсь добавить команду try / catch и посмотреть, напечатает ли она что-нибудь полезное в следующий раз, когда зависнет.

Кто-нибудь знает, что может привести к зависанию скрипта? Должен ли я загружать / записывать изображение другим способом? Я использую Python 3.6.3. Любая помощь будет оценена.

...