Многопоточность Python с проблемой Urllib2 - PullRequest
3 голосов
/ 31 октября 2009

Я могу загружать несколько файлов довольно быстро, используя несколько потоков одновременно, но проблема в том, что через несколько минут он постепенно замедляется почти до полной остановки, я понятия не имею, почему. В моем коде нет ничего плохого, и мой ОЗУ / ЦП в порядке. Единственное, о чем я могу думать, это то, что urllib2 неправильно обрабатывает огромное количество соединений. Если это помогает, я использую прокси, но у меня была эта проблема и без них. У кого-нибудь есть предложения или идеи по этому вопросу? Спасибо!

Ответы [ 2 ]

3 голосов
/ 31 октября 2009

Можете ли вы подтвердить, что выполнение одинакового количества одновременных загрузок без Python продолжает загружаться быстро? Возможно, проблема не в вашем коде, а в том, что ваше соединение ограничено или сайт обслуживает файлы.

Если это не проблема, вы можете попробовать библиотеку pyprocessing для реализации многопроцессорной версии вместо многопоточной. Если вы используете Python 2.6, в состав дистрибутива входит pyprocessing как multiprocessing . Преобразовать многопоточный код в многопроцессорный код довольно просто, поэтому стоит попробовать хотя бы для того, чтобы подтвердить, что проблема связана с многопоточностью.

1 голос
/ 31 октября 2009

Как и в другом предложенном ответе, проблема может быть связана с вашим подключением или сайтом, который обслуживает файлы. Если вы можете запустить свой код на тестовом сервере локально, вы сможете устранить это.

Если проблема исчезает при использовании тестового сервера, значит, проблема связана с вашим подключением или удаленным сервером.

Если проблема сохраняется при использовании тестового сервера, то это больше всего похоже на что-то в вашем коде, но тогда вы, по крайней мере, будете иметь журналы сервера, чтобы дать вам более полное представление о том, что происходит.

Что касается другого пути, который вы можете исследовать, этот поток предлагает использовать httplib2 вместо urllib2.

...