我有一个URL列表,希望在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 :(得分:0)
如果网址在一个字典中,那么用词典理解就可以直接做到这一点。要获取origin_urls
中的所有网址,请执行
response_location = yield {name: http_client.fetch(url, raise_error=False)
for (name, url) in origin_urls.items()}
有两个网址,它有点笨拙。以下是您问题中代码的等效内容:
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()])