try:
html = urlopen('http://glbse.com/api/asset/' + asset.name)
except:
print 'error while updating the price of ' + asset.name
continue
json_txt = html.read()
ticker = json.loads(json_txt)
average_price = int(ticker['t24havg'])
if average_price == 0:
average_price = int(ticker['t5davg'])
if average_price == 0:
average_price = int(ticker['t7davg'])
if average_price == 0:
average_price = int(ticker['latest_trade'])
if average_price == 0:
print 'could not determine the price of ' + asset.name
continue
asset.average_price = average_price
Я использую механизацию для urlopen. Этот код (и остальная часть программы), кажется, работает отлично в течение нескольких часов, но, пройдя через этот раздел тысячи раз, в конечном итоге окажется где-то в этом разделе кода.Почему этот раздел кода python зависает во время выполнения?
Он висит на неопределенный срок. Я даже вернулся к нему, чтобы найти, что он висел там часами.
В результате проблемы, с которой я столкнулся, есть сообщения об аналогичной проблеме, где выполнение зависает на .read(), который, как сообщается, исправлен много лет назад.
Так что же вызывает исполнение, зависание и как его исправить или обмануть?
Я видел, что 'json.loads' зависает, когда не задан действительный файл json. Вы уверены, что всегда используете правильный json-файл? – Darthfett
Не используйте голые, кроме 'except:'; это поймает исключение _any_. Поймайте только то, что вам нужно поймать. Добавьте несколько журналов; что должно помочь вам понять, в чем проблема. – MRAB
Вы можете попробовать передать необязательный аргумент тайм-аута urlib2.urlopen и посмотреть, помогает ли это. –