Python 处理并行ftp下载错误
我正在使用Python的多个会话从ftp服务器同时下载多个文件。在某个时刻,一个会话(我怀疑)读取另一个进程正在访问的文件,并抛出以下错误:Python 处理并行ftp下载错误,python,error-handling,ftp,ftplib,Python,Error Handling,Ftp,Ftplib,我正在使用Python的多个会话从ftp服务器同时下载多个文件。在某个时刻,一个会话(我怀疑)读取另一个进程正在访问的文件,并抛出以下错误: Traceback (most recent call last): File "F:\utilities\python\downloadFTP_NV.py", line 66, in <module> os.unlink(FILE) WindowsError: [Error 32] The process cannot acce
Traceback (most recent call last): File
"F:\utilities\python\downloadFTP_NV.py", line 66, in <module>
os.unlink(FILE) WindowsError: [Error 32] The process cannot access the file because it is being used by another process:
u'm_4011851_ne_11_1_20100620.tif'
我曾考虑过添加另一个
,除了带有time.sleep(5)
的语句,以帮助减少重叠过程。或者干脆删除os.unlink(文件)
行处理此类错误的最佳方法是什么?我想说的是,问题在于如何启动会话并允许它们与文件重叠。尝试在一个主会话中运行它们,并将要下载的文件作为参数传递
或者,您也可以使用更简单的模块
我想在并行下载多个文件的过程中,您不应该有两个进程试图在同一个文件上运行的情况(只要您不并行下载一个文件)。我想说的是,问题在于如何启动会话并允许它们重叠文件。尝试在一个主会话中运行它们,并将要下载的文件作为参数传递
或者,您也可以使用更简单的模块
我想在并行下载多个文件的过程中,您不应该有两个进程试图在同一个文件上运行的情况(只要您不并行下载一个文件)。我想说的是,问题在于如何启动会话并允许它们重叠文件。尝试在一个主会话中运行它们,并将要下载的文件作为参数传递
或者,您也可以使用更简单的模块
我想在并行下载多个文件的过程中,您不应该有两个进程试图在同一个文件上运行的情况(只要您不并行下载一个文件)。我想说的是,问题在于如何启动会话并允许它们重叠文件。尝试在一个主会话中运行它们,并将要下载的文件作为参数传递
或者,您也可以使用更简单的模块
我想在paraller下载多个文件的过程中,你不应该有两个进程试图在同一个文件上运行的情况(只要你不以paraller方式下载一个文件)。我知道这篇文章已经有3年的历史了,但为了其他可能有相同问题的用户,我将给出一个可能的解决方案
在您的代码中,我没有看到您在操作后关闭文件,因此我认为这就是问题所在。作为最佳实践,最好使用with
语句,因为它提供了上下文管理器和更好的错误处理
因此,您检索文件的代码部分应该如下所示
with open(FILE, 'wb') as fhandle:
ftp.retrbinary('RETR ' + FILE, fhandle.write)
这会解决你的问题。而且您不需要os.unlink(文件)
如果你需要一些关于with
声明的背景信息,这是一个可以访问的地方我知道这篇文章已经有3年了,但是为了其他可能有同样问题的用户,我会给出一个可能的解决方案
在您的代码中,我没有看到您在操作后关闭文件,因此我认为这就是问题所在。作为最佳实践,最好使用with
语句,因为它提供了上下文管理器和更好的错误处理
因此,您检索文件的代码部分应该如下所示
with open(FILE, 'wb') as fhandle:
ftp.retrbinary('RETR ' + FILE, fhandle.write)
这会解决你的问题。而且您不需要os.unlink(文件)
如果你需要一些关于with
声明的背景信息,这是一个可以访问的地方我知道这篇文章已经有3年了,但是为了其他可能有同样问题的用户,我会给出一个可能的解决方案
在您的代码中,我没有看到您在操作后关闭文件,因此我认为这就是问题所在。作为最佳实践,最好使用with
语句,因为它提供了上下文管理器和更好的错误处理
因此,您检索文件的代码部分应该如下所示
with open(FILE, 'wb') as fhandle:
ftp.retrbinary('RETR ' + FILE, fhandle.write)
这会解决你的问题。而且您不需要os.unlink(文件)
如果你需要一些关于with
声明的背景信息,这是一个可以访问的地方我知道这篇文章已经有3年了,但是为了其他可能有同样问题的用户,我会给出一个可能的解决方案
在您的代码中,我没有看到您在操作后关闭文件,因此我认为这就是问题所在。作为最佳实践,最好使用with
语句,因为它提供了上下文管理器和更好的错误处理
因此,您检索文件的代码部分应该如下所示
with open(FILE, 'wb') as fhandle:
ftp.retrbinary('RETR ' + FILE, fhandle.write)
这会解决你的问题。而且您不需要os.unlink(文件)
如果您需要有关with
语句的一些背景信息,请访问这里