我尝试使用龙卷风从服务器列表中下载文件异步,并且在为每次下载命名文件时遇到问题。 这是我现在正在使用的代码(所有主机都是先前定义的,它来自数据库的查询):
http_client = httpclient.AsyncHTTPClient()
i=0
def download_file(host,ip):
month = "01"
year = "2016"
url="http://" + ip + ":1055/data?mo=01&ye=2016"
http_client.fetch(url, callback=write_file)
global i
i -= 1
if i == 0:
ioloop.IOLoop.instance().stop()
print "DONE"+host+year+month
def write_file(response, host,year,month):
with open(host+"-tt-"+str(year)+"-tt-"+str(month)+"-tt-.csv", "w") as f:
f.write(response.body)
print "DONE"
for host in all_hosts:
ip = host[1]
host = host[0]
http_client.fetch(download_file(host,ip))
ioloop.IOLoop.instance().start()
我不确定如何处理通过回调将变量传递给write_file函数,或者即使这是执行此操作的最佳方法。 理想情况下,我喜欢基于主机名命名的文件,该文件不在响应或网址中。
有关如何正确执行此操作的任何想法?
谢谢, 艾萨克
答案 0 :(得分:1)
使用functools.partial
。将response
作为write_file
的最后一个参数而不是第一个,并绑定其他参数,如下所示:
http_client.fetch(url,callback = functools.partial(write_file,host,year,month))