Несколько соединений urllib2 - PullRequest
2 голосов
/ 10 ноября 2010

Я хочу загрузить несколько изображений одновременно. Для этого я использую потоки, каждый из которых загружает изображение, используя модуль urllib2. Моя проблема в том, что даже если потоки запускаются (почти) одновременно, изображения загружаются по одному, как в однопоточной среде.

Вот функция с резьбой:

def updateIcon(self, iter, imageurl):
    req = urllib2.Request('http://site.com/' + imageurl)
    response = urllib2.urlopen(req)
    imgdata = response.read()
    gobject.idle_add(self.setIcon, iter, imgdata)

Отладка моего кода Я обнаружил, что загрузки застряли в строке "response = urllib2.urlopen (req)" В чем проблема? Это потому что модуль потоков или urllib2? Как я могу это исправить?

Заранее спасибо

Ответы [ 2 ]

3 голосов
/ 10 ноября 2010

Рассмотрите возможность использования urllib3 . Он поддерживает пул соединений и множественные параллельные запросы через процессы (не потоки). Это должно решить эту проблему. Будьте внимательны при сборке мусора пулов соединений, если вы обращаетесь ко многим различным сайтам, поскольку каждый сайт получает свой пул.

0 голосов
/ 10 ноября 2010

По моему опыту, многопоточность CPython, кажется, имеет лучшую производительность, чем многопоточная.Потому что CPython имеет реализацию потока, основанную на потоке ядра.Но разница небольшая из-за GIL (Global Interpreter Lock).Замените многопроцессорность на многопоточность.Это просто.Оба имеют похожий интерфейс.

...