Python urllib2 с поддерживает

По моему мнению, потоки - не самый эффективный способ выполнения соединений с сокетами, но они обеспечивают большую функциональность с точки зрения запуска потоков. Я говорю это потому, что из-за опыта, длительный запуск потоков приводит к тому, что устройства становятся очень горячими и ресурсоемкими. Даже простой while(true) разогреет телефон за считанные минуты. Если вы говорите, что взаимодействие с пользовательским интерфейсом не важно, возможно, AsyncTask хорошо, потому что они предназначены для долгосрочных процессов. Это всего лишь мое мнение по этому поводу.

ОБНОВЛЕНИЕ

Пожалуйста, не обращайте внимания на мой ответ выше! Я ответил на этот вопрос еще в 2011 году, когда у меня было гораздо меньше опыта в Android, чем сейчас. Мой ответ выше вводит в заблуждение и считается неправильным. Я оставляю это там, потому что многие люди прокомментировали это ниже, исправляя меня, и я усвоил свой урок.

В этой теме есть гораздо лучшие ответы, но я, по крайней мере, дам более правильный ответ. Нет ничего плохого в использовании обычной Java Thread; тем не менее, вы должны быть очень осторожны с реализацией этого, потому что неправильное выполнение может быть очень ресурсоемким (наиболее заметным симптомом может быть нагрев вашего устройства). AsyncTask довольно идеальны для большинства задач, которые вы хотите запускать в фоновом режиме (типичными примерами являются дисковый ввод-вывод, сетевые вызовы и вызовы базы данных). Тем не менее, AsyncTask не следует использовать для особенно длительных процессов, которые, возможно, потребуется продолжить после того, как пользователь закрыл ваше приложение или перевел свое устройство в режим ожидания. Я бы сказал, что в большинстве случаев обо всем, что не относится к потоку пользовательского интерфейса, можно позаботиться в AsyncTask.

43
задан Piotr Dobrogost 19 January 2012 в 09:22
поделиться

2 ответа

Используйте библиотеку urlgrabber . Сюда входит обработчик HTTP для urllib2, который поддерживает HTTP 1.1 и keepalive:

>>> import urllib2
>>> from urlgrabber.keepalive import HTTPHandler
>>> keepalive_handler = HTTPHandler()
>>> opener = urllib2.build_opener(keepalive_handler)
>>> urllib2.install_opener(opener)
>>> 
>>> fo = urllib2.urlopen('http://www.python.org')

Примечание: вы должны использовать urlgrabber версии 3.9.0 или более ранней, поскольку модуль keepalive был удален в версия 3.9.1

Имеется порт модуля keepalive для Python 3.

34
ответ дан 26 November 2019 в 23:00
поделиться

Обратите внимание, что urlgrabber не полностью работает с питоном 2.6. Я исправил проблемы (думаю), сделав следующие модификации в keepalive.py.

В keepalive.HTTPHandler.do_open() удалите this

     if r.status == 200 or not HANDLE_ERRORS:
         return r

И вставьте this

     if r.status == 200 or not HANDLE_ERRORS:
         # [speedplane] Must return an adinfourl object
         resp = urllib2.addinfourl(r, r.msg, req.get_full_url())
         resp.code = r.status
         resp.msg = r.reason
         return resp
4
ответ дан 26 November 2019 в 23:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: