Tornado AsyncHTTPClient вызывает обратный вызов: дополнительные параметры? - PullRequest
17 голосов
/ 25 мая 2011

Я новичок во всей этой асинхронной игре (в основном это был парень из 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()

Ответы [ 2 ]

22 голосов
/ 25 мая 2011

Вам необходимо «связать» ваши дополнительные аргументы. Используйте functools.partial, как это:

items = ..
iteration = ..
cb = functools.partial(self.resp, items, iteration)

или вы можете использовать лямбду, как это:

cb = lambda : self.resp(items, iteration)

(вам, вероятно, нужно добавить сигнатуру для def resp (self, items, iteration, response):)

0 голосов
/ 04 ноября 2013

вы также можете рассмотреть gen.coroutine декоратор, если вы вызываете fetch из RequestHandler.в этом случае вам не нужно добавлять дополнительные параметры к обратному вызову, потому что вы видите результат в той же области действия, что и вызов fetch.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...