2016-12-16 58 views
0

我有一個網址列表,希望在Python Tornado中並行調用異步。目前,這是我如何去做:龍捲風異步調用在字典/列表中的網址並行

response_location = yield dict(origin_maxmind=http_client.fetch(origin_urls['maxmind'], raise_error=False), 
            origin_ipinfo=http_client.fetch(origin_urls['ipinfo'], raise_error=False), 
            origin_freegeoip=http_client.fetch(origin_urls['freegeoip'], raise_error=False), 
            arrival_maxmind=http_client.fetch(arrival_urls['maxmind'], raise_error=False), 
            arrival_ipinfo=http_client.fetch(arrival_urls['ipinfo'], raise_error=False), 
            arrival_freegeoip=http_client.fetch(arrival_urls['freegeoip'], raise_error=False)) 

而且在路上,我可能要添加新網址,沿着那些調用已經存在。如果網址在dict中,我認爲這可能會更容易。然後龍捲風異步並行地調用dict中的所有URL。我試圖避免如果有人想添加一個新的URL來調用,必須改變很多東西。這怎麼能實現?

回答

0

如果網址是一個字典,那麼用字典理解就可以做到這一點。要獲取所有網址origin_urls,做

response_location = yield {name: http_client.fetch(url, raise_error=False) 
     for (name, url) in origin_urls.items()} 

使用URL兩種類型的字典,這是一個有點笨拙。以下是您問題中的相應代碼:

response_location = yield dict(
    [('origin_' + name, http_client.fetch(url, raise_error=False)) 
     for (name, url) in origin_urls.items()] + 
    [('arrival_' + name, http_client.fetch(url, raise_error=False)) 
     for (name, url) in arrival_urls.items()])