今天在写远程下载循环遍历远程目录和下载的时候碰到了报错
[Errno 32] Broken pipe
Errno 32] Broken pipe异常属于IOError,因此此问题和IO操作有关,然后检查相关的业务逻辑,除了一个巨长的远程遍历目录,其他的基本应该没有什么大的问题,初步觉得是这个问题导致,后面将代理做了下微调,解决。
因为每天都要下载当前的文件,文件有历史存档,每次循环整个目录的文件列表是非常消耗资源的,但是想到文件名是有规律的,所以就判断下是不是当前文件,文件名基本是这样的20190415xxx.log
所以我加了个yield生成器来造一个新的列表生成器,原本整个目录的几十万文件,最后只需要处理几千个,瞬间内存CPU轻松了很多,真替它们高兴,然后我的主要代码还是贴出来下:
def rtn_new_list(file_list): now_time = int(time.time()) now_day_array = time.localtime(now_time) now_day = time.strftime("%Y%m%d", now_day_array) for p in ftp_file_list: if p.startswith(now_day): yield p
然后就是非常非常快的处理我需要的今日文件了,看来还是日常代码写太少了,没事还得多写实际项目练手