2011-05-24 26 views
17

Bütün bu zaman uyumsuz oyun (çoğunlukla bir Django adam olmuştur) için çeşit yeniyim ama merak ediyorum: Ben Tornado'nun AsyncHTTPClient.fetch geri arama için ek parametreler iletebilirsiniz nasıl? Örneğin, ben (belirli sayıda verinin üzerinde çalışmadan önce idam kadar beklemek sırayla) bir geri arama adı olmuştur sayısını takip ediyorum ve yapmak istediğiniz bir şey gibi:Tornado AsyncHTTPClient geri çağırma: Ekstra parametreler?

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() 
+0

Neden geri arama adı olmuştur sen sayısını izlemek gerekiyor? – jsalonen

cevap

22

Ek argümanlarınızı "bağlamanız" gerekir. Böyle Kullanım functools.partial: Böyle

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

veya lambda kullanabilirsiniz:

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

(muhtemelen def respin (self, öğeleri, yineleme için imza eklemek gerekir, Eğer bir RequestHandler içinden getirme aradığınız takdirde yanıt) :)

+1

Teşekkürler! Bu harika ve tam olarak aradığım şeydi, fakat programın async olmadan yeniden yazdım, çünkü yaptığım şey için gerekli olmadığının farkına vardım (RSS beslemelerinde veri toplamak). Yine de eminim bunu tekrar kullanacağım! –

+1

+1, kısmi gitmek için yoldur. – waldecir

+1

Bir kapanış düşündüm, ama bu daha temiz bir yol gibi görünüyor. – vartec

0

ayrıca gen.coroutine dekoratör düşünebilirsiniz. Bu durumda, geri çağırmaya fazladan parametreler eklemenize gerek yoktur çünkü sonuç, getirilecek çağrıyla aynı kapsamda görünür durumdadır.

+2

" Bu bağlantı soruyu yanıtlayabilirken, daha iyi cevabın temel kısımlarını buraya dahil etmek ve referans için bağlantı sağlamak. Bağlantılı sayfa değiştiğinde sadece bağlantı yanıtları geçersiz olabilir. " – zero323

İlgili konular