Подтвердить что ты не робот

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()
4b9b3361

Ответ 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. в этом случае вам не нужно добавлять дополнительные параметры для обратного вызова, потому что у вас есть результат, видимый в той же области, что и вызов для извлечения.