Tornado AsyncHTTPClient fetch callback: дополнительные параметры?
Я как бы новичок во всей асинхронной игре (в основном, был Django), но мне было интересно: как передать дополнительные параметры для обратного вызова Tornado AsyncHTTPClient.fetch? Например, я отслеживаю количество раз, когда был вызван обратный вызов (чтобы дождаться выполнения определенного номера перед работой над данными), и я хотел бы сделать что-то вроде:
def getPage(self, items,iteration):
http = AsyncHTTPClient()
http.fetch(feed, callback=self.resp(items,iteration))
def resp(self, response, items, iteration):
#do stuff
self.finish()
Ответы
Ответ 1
Вам нужно "привязать" свои дополнительные аргументы.
Используйте functools.partial, например:
items = ..
iteration = ..
cb = functools.partial(self.resp, items, iteration)
или вы можете использовать лямбда, например:
cb = lambda : self.resp(items, iteration)
(вам, вероятно, нужно добавить подпись для def resp (self, items, iteration, response):)
Ответ 2
вы также можете рассмотреть декоратор gen.coroutine, если вы вызываете извлечения изнутри RequestHandler. в этом случае вам не нужно добавлять дополнительные параметры для обратного вызова, потому что у вас есть результат, видимый в той же области, что и вызов для извлечения.