Я хочу написать асинхронный http-клиент с использованием скрученной структуры, которая каждые 5 запросов асинхронно/одновременно запускает 5 разных серверов. Затем сравните эти ответы и покажите результат. Может кто-то может помочь в этом.написать асинхронный http-клиент, используя скрученную фреймворк
ответ
Для создания асинхронных HTTP-запросов вам необязательно twisted
. Вы можете использовать потоки python и замечательный пакет requests
.
from threading import Thread
import requests
def make_request(url, results):
response = requests.get(url)
results[url] = response
def main():
results = {}
threads = []
for i in range(5):
url = 'http://webpage/{}'.format(i)
t = Thread(target=make_request, kwargs={'url': url, 'results': results})
t.start()
threads.append(t)
for t in threads():
t.join()
print results
Это не отвечает на вопрос. Это лучше подходит для комментариев. OP может уже иметь скрученную настройку. Кроме того, нить и асинхронный IO не являются одинаковыми. – taskinoor
Спасибо за предложение, но требования таковы, что мне нужно сделать это с помощью скрученного. – mukesh
Проблема с вашим ответом заключается в том, что он заблокирует ожидание завершения каждого потока. Хотя это все равно не сделает ваш вопрос правильным, '' просит'' поддерживает '' gevent'', который должен устранить '' .join() '' вызовы atleast. Чтобы использовать подобный подход в twisted, вы можете использовать '' deferToThread() '' для запуска каждого запроса в потоке –
В этой ситуации я предлагаю использовать treq
и DeferredList
агрегировать ответов затем огонь обратного вызова, когда все адреса были возвращены. Вот краткий пример:
import treq
from twisted.internet import reactor, defer, task
def fetchURL(*urls):
dList = []
for url in urls:
d = treq.get(url)
d.addCallback(treq.content)
dList.append(d)
return defer.DeferredList(dList)
def compare(responses):
# the responses are returned in a list of tuples
# Ex: [(True, b'')]
for status, content in responses:
print(content)
def main(reactor):
urls = [
'http://swapi.co/api/films/schema',
'http://swapi.co/api/people/schema',
'http://swapi.co/api/planets/schema',
'http://swapi.co/api/species/schema',
'http://swapi.co/api/starships/schema',
]
d = fetchURL(*urls) # returns Deferred
d.addCallback(compare) # fire compare() once the URLs return w/ a response
return d # wait for the DeferredList to finish
task.react(main)
# usually you would run reactor.run() but react() takes care of that
В функции main
, список URL-адресов передаются в fecthURL()
. Там каждый сайт сделает асинхронный запрос и вернет Deferred
, который будет добавлен к list
. Затем окончательный список будет использоваться для создания и возврата объекта DeferredList
. Наконец, мы добавляем обратный вызов (compare()
в этом случае) на DeferredList
, который будет получать доступ к каждому ответу. Вы бы поставили свою логику сравнения в функцию compare()
.
- 1. Взаимосвязанный, основанный на событиях асинхронный «фреймворк»
- 2. Qt QTcpSocket асинхронный написать
- 3. Как запустить скрученную колбу?
- 4. Как обновить скрученную структуру
- 5. Как запустить скрученную колбу?
- 6. Twisted (асинхронный сервер) vs Django (или любой другой фреймворк)
- 7. Node.js: Как написать «асинхронный» getter
- 8. Как написать асинхронный метод JavaScript?
- 9. Как написать асинхронный запрос LINQ?
- 10. Как написать асинхронный C# 5?
- 11. Как пройти через отлаженную скрученную?
- 12. Как написать веб-фреймворк как опыт обучения
- 13. Как написать асинхронный обработчик файлов в Vertx
- 14. Как написать асинхронный HttpServer с помощью Netty
- 15. Как написать асинхронный метод с параметром out?
- 16. Как написать асинхронный цикл while в Node.JS
- 17. Как отправить электронную почту, используя фреймворк cakephp?
- 18. ionic: используя фреймворк только с HTML5
- 19. Проверьте, завершен ли асинхронный запрос, используя асинхронный цикл loopj android
- 20. Как добавить имя сервера в скрученную?
- 21. Запускает прослушиватели событий, используя «.click()» асинхронный?
- 22. Должен ли я использовать фреймворк или написать свой собственный MVC?
- 23. Javascript: подобные сообщения Facebook, используя фреймворк javascript sdk?
- 24. Поддерживает ли фреймворк фреймворк аутентификацию Windows?
- 25. Измените запрос на фреймворк Django
- 26. Асинхронный Java RMI?
- 27. Как написать изображение, используя FileOutputStream
- 28. jquery написать стиль, используя переменную
- 29. Как написать php, используя стиль: ""
- 30. Как написать асинхронный метод в библиотеке классов в C#
Нужно ли использовать витой? Вы можете делать асинхронные запросы без искажений. –