我正在尝试创建一个代码,使用pysftp和多处理libs下载同一类型的N个文件。我做了一个基本的python培训,得到了一些代码并将它们组合成一个,但我无法实现。如果有人帮我,我会很感激的。错误发生在vFtp.关闭()命令。在假设开始同步下载的部分。在
from multiprocessing import Pool
import pysftp
import os
vHost='10.11.12.13'
vLogin='admin'
vPwd='pass1234'
vFtpPath='/export/home/'
os.chdir('d:/test/')
os.getcwd()
cnopts=pysftp.CnOpts()
cnopts.hostkeys = None
vFtp=pysftp.Connection(vHost,username=vLogin,password=vPwd,cnopts=cnopts)
vFtp.cwd(vFtpPath)
vObjectList=vFtp.listdir()
vFileList=[]
vFoldList=[]
for vObject in vObjectList:
vType=str(vFtp.lstat(vObject))[:1]
if vType!='d':
vFileList.append(vObject)
else:
vFoldList.append(vObject)
vFtp.close()
def fDownload(vFileAux):
vFtpAux=pysftp.Connection(vHost,username=vLogin,password=vPwd,cnopts=cnopts)
vFtpAux.cwd(vFtpPath)
vFtpAux.get(vFileAux,preserve_mtime=True)
vFtpAux.close()
if __name__ == "__main__":
vPool=Pool(3)
vPool.map(fDownload,vFileList)
看起来您正在尝试获取文件列表,然后使用多个进程同时下载它们。在
不要手动检查文件,而是尝试对connection对象使用
walktree
方法:pysftp walktree下面是我用Python3.5制作的一个工作示例。我只是使用一个本地ftp服务器和一些小文件,所以我模拟了下载延迟。更改
^{1}$max_workers
参数以设置同时下载的数量。在edit:
ProcessPoolExecutor
用于在多个cpu核心上运行某些东西,并且将受到处理器的限制。对于像下载这样的网络任务,您可以使用线程代替。在上面的代码中,这只是一个更改:而不是ProcessPoolExecutor
导入并使用ThreadPoolExecutor
。然后您可以使用更多max_workers
。在相关问题 更多 >
编程相关推荐