下载龙卷风文件并指定名称

时间:2016-01-15 14:19:22

标签: python tornado

我尝试使用龙卷风从服务器列表中下载文件异步,并且在为每次下载命名文件时遇到问题。 这是我现在正在使用的代码(所有主机都是先前定义的,它来自数据库的查询):

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函数,或者即使这是执行此操作的最佳方法。 理想情况下,我喜欢基于主机名命名的文件,该文件不在响应或网址中。

有关如何正确执行此操作的任何想法?

谢谢, 艾萨克

1 个答案:

答案 0 :(得分:1)

使用functools.partial。将response作为write_file的最后一个参数而不是第一个,并绑定其他参数,如下所示:

http_client.fetch(url,callback = functools.partial(write_file,host,year,month))