Я новичок в торнадо.Как использовать асинхронный атлас торнадо?
Я хочу написать несколько функций для асинхронного выбора веб-страниц. Поскольку здесь нет обработчиков запросов, приложений или серверов, я думаю, что могу использовать только tornado.httpclient.AsyncHTTPClient. Но все образцы кода, похоже, находятся на сервере торнадо или на диспетчере запросов. Когда я пытался использовать его в одиночку, он никогда не срабатывает. Например:
def handle(self,response):
print response
print response.body
@tornado.web.asynchronous
def fetch(self,url):
client=tornado.httpclient.AsyncHTTPClient()
client.fetch(url,self.handle)
fetch('http://www.baidu.com')
Он говорит: «„ул“объект не имеет атрибута" приложение», но я пытаюсь использовать это в одиночку?
или:
@tornado.gen.coroutine
def fetch_with_coroutine(url):
client=tornado.httpclient.AsyncHTTPClient()
response=yield http_client.fetch(url)
print response
print response.body
raise gen.Return(response.body)
fetch_with_coroutine('http://www.baidu.com')
не работает.
Раньше я пытался передать обратный вызов AsyncHTTPHandler.fetch, затем запустил IOLoop, он работает, и печатается исходный код веб-страницы. Но я не могу понять, что делать с ioloop.
я заметил run_sync в то время я сделал этот пост. Вы имеете в виду, что нет ничего плохого, если я начинаю и останавливаю ioloop каждый раз, когда запрос сделан, и он все еще работает асинхронно? – user17
Обычный способ использования Tornado - вызывать 'run_sync()' (или 'start()') ровно один раз. Вызов 'run_sync()' более одного раза (за исключением тестов) необычен, и в большинстве случаев ему не хватает точки асинхронного программирования (путем одновременного синхронного асинхронного действия, вы исключаете преимущества параллелизма). –