Python доступ к нескольким веб-страницам одновременно - PullRequest
0 голосов
/ 20 июля 2009

У меня есть графический интерфейс tkinter, который загружает данные с нескольких веб-сайтов одновременно. Я запускаю отдельную ветку для каждой загрузки (около 28). Это слишком много потоков для одного процесса графического интерфейса? потому что это очень медленно, каждая отдельная страница должна занимать от 1 до 2 секунд, но когда все запускаются одновременно, это занимает более 40 секунд. Можно ли как-нибудь сократить время загрузки всех страниц? Любая помощь приветствуется, спасибо.

Ответы [ 3 ]

2 голосов
/ 20 июля 2009

Вероятно, вам мешает GIL (глобальная блокировка интерпретатора). У Python есть проблемы с производительностью во многих потоках.

Вы можете попробовать twisted.web.getPage (см. http://twistedmatrix.com/projects/core/documentation/howto/async.html немного вниз по странице). У меня нет эталонов для этого. Но, взяв пример на этой странице и добавив 28 отсрочек, вы увидите, насколько быстро он даст вам сопоставимый результат довольно быстро. Имейте в виду, что вам придется использовать реактор GTK и войти в стиль программирования Twisteds.

1 голос
/ 20 июля 2009

Процесс может иметь сотни потоков в любой современной ОС без проблем.

Если у вас ограниченная пропускная способность, от 1 до 2 секунд умножить на 28 означает, что 40 секунд - это то, что нужно. Если у вас ограничено время ожидания, оно должно быть быстрее, но без информации все, что я могу предложить, это:

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

Трудно дать что-то лучше без дополнительной информации.

0 голосов
/ 20 июля 2009

Вы можете попробовать использовать процессы вместо потоков. В Python есть GIL, который может вызвать некоторые задержки в вашей ситуации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...