2012-06-13 2 views
2
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(), который, как сообщается, исправлен много лет назад.

Так что же вызывает исполнение, зависание и как его исправить или обмануть?

+0

Я видел, что 'json.loads' зависает, когда не задан действительный файл json. Вы уверены, что всегда используете правильный json-файл? – Darthfett

+7

Не используйте голые, кроме 'except:'; это поймает исключение _any_. Поймайте только то, что вам нужно поймать. Добавьте несколько журналов; что должно помочь вам понять, в чем проблема. – MRAB

+2

Вы можете попробовать передать необязательный аргумент тайм-аута urlib2.urlopen и посмотреть, помогает ли это. –

ответ

1

с использованием mechanize.Browser().open() вместо urlopen раскрывает «urllib2.URLError urlopen connection time out», который не поднимается при использовании только urlopen. Я сильно подозреваю, что это проблема, и мое решение состоит в том, чтобы использовать mechanize.Browser().open() вместо urlopen во всех случаях

Смежные вопросы