问题描述
因此,我有一个将一系列目录和文件提交给服务的过程。该服务将处理这些文件,然后将目录和输出文件返回到另一个目录
例如,将有一个带有运行名称的父目录,然后是我们正在处理的每个日期的子目录。即:
输入
RunName
2020-06-01
2020-06-02
2020-06-03
该服务在输出下为运行名称创建一个等效目录,然后在它们处理数据的目录中创建一个目录,因此在处理第一个文件时,它看起来像这样:
输出
RunName
2020-06-01
服务完成所有文件的处理后,会将带有所有日期的“完成”文件放入目录中。收到完文件后,我的程序就可以进入下一个处理阶段。
我要确定的是处理的百分比,然后确定何时完成。
下面的代码可以完美地工作,除了一件事
我不断得到
错误:paramiko.transport:套接字异常:远程主机强行关闭了现有连接(10054) 指向第二行(以“ While”开头)
我需要进行哪些更改以强制重新连接,然后在发生此错误时重试,并让while循环沿其持续时间继续。
任何帮助将不胜感激..这使我丧命,因为它打断了更大的进程并导致积压。
srv = pysftp.Connection(host=servername,username=user,password=pwd,cnopts=cnopts)
while srv.isfile(donefile)==False:
try:
srv = pysftp.Connection(host=servername,cnopts=cnopts)
dirnames=[]
for i in srv.listdir(outputdir):
if i[:6]=="date=2":
dirnames.append(i)
srv.close()
if max(dirnames)!=lastname:
print("Last Directory is: ",max(dirnames),"out of",max(dirnamesin)," ",round((len(dirnames)/len(dirnamesin))*100),"pct done",datetime.datetime.now(),"run: ",run_name)
lastname=max(dirnames)
time.sleep(30)
srv = pysftp.Connection(host=servername,cnopts=cnopts)
except:
print("connection error - will try again in 30 seconds")
time.sleep(30)
srv = pysftp.Connection(host=servername,cnopts=cnopts)
print ('done')
解决方法
我会尝试重构它以确保正确关闭连接,例如
while True:
try:
with pysftp.Connection(host=servername,username=user,password=pwd,cnopts=cnopts) as srv:
if srv.isfile(donefile):
break
dirnames=[]
for i in srv.listdir(outputdir):
if i[:6]=="date=2":
dirnames.append(i)
if max(dirnames)!=lastname:
print("Last Directory is: ",max(dirnames),"out of",max(dirnamesin)," ",round((len(dirnames)/len(dirnamesin))*100),"pct done",datetime.datetime.now(),"run: ",run_name)
lastname=max(dirnames)
except Exception:
print("connection error - will try again in 30 seconds")
time.sleep(30)
print('done')