2014-01-29 5 views
2

Я ищу, чтобы настроить HTTP-сервер, который принимает некоторый ввод, а затем приложение должно одновременно отправлять несколько HTTP-запросов (на другой сервер). Каков наилучший подход для этого?Python: Несколько HTTP-запросов одновременно

Если я использую витую структуру, мне все еще нужно использовать потоки?

ответ

2

Вам не нужно беспокоиться о потолочной или поточной безопасности. Большая часть времени, затрачиваемая на выполнение HTTP-запросов, ждет ответа, и в это время Python может безопасно запускать другой код параллельно. Используйте некоторые из библиотек и встроенные функции. Python должен управлять одновременными ожиданиями ввода-вывода.

Вы можете использовать gevent. У Twisted есть аналогичная функциональность, но может быть сложнее научиться использовать. Также есть функциональность multiprocessing.dummy, встроенная в Python.

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

+0

Для ознакомления с ['gevent'] (http://www.gevent.org/) следующие руководства могут быть полезны: http://www.gevent.org/intro.html и http: //sdiehl.github .io/GEvent-учебник/# простые-серверы – iljau

0

Либо Threading, либо Twisted могут это сделать.

ie. Если вы используете скручен, вам не нужно использовать Threading.

Имейте в виду, что на некоторых серверах есть ограничение на количество подключений, которое они разрешают с одного IP-адреса.

2

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

Для удобства использования HTTP-запросов с использованием Twisted, вы можете рассмотреть Treq, уровень удобства для использования HTTP-клиента Twisted.

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