首页
统计
友情链接
Search
1
python2.7的paramiko模块下载大文件失败
75 阅读
2
记一次客户端连接Docker容器 sshd 报错Permission denied, please try again.的问题
74 阅读
3
Python获取macbook用户名
71 阅读
4
Ubuntu 24.04 编译源码安装 Python 2.7
24 阅读
5
Centos 7.9.2009 ARM版本安装ssh
18 阅读
Python
Linux
登录
Search
标签搜索
python
macbook
pyhton
Ubuntu
python2.7
Ubuntu24
CentOS
SuperSu
累计撰写
5
篇文章
累计收到
12
条评论
首页
栏目
Python
Linux
页面
统计
友情链接
搜索到
1
篇与
的结果
2024-03-25
python2.7的paramiko模块下载大文件失败
编程中需要用到 Python(2.7) 的 paramiko 模块下载服务器上面一个比较大的文件,命令如下:client = paramiko.Transport(ip, port) client.connect(username=user, password=password) sftp = paramiko.SFTPClient.from_transport(client) sftp.get(remotefile, localfile)发现一个很奇怪的现象,下载比较小的文件时,没有发现异常,直到有一次下载一个 300mb+的文件时,中途卡住一直下载不下来解决方案:修改 python 有关 sftp 数据下载的源码,文件位置为:/usr/lib/python2.7/site-packages/paramiko/sftp_file.py找到_prefetch_thread 函数:def _prefetch_thread(self, chunks): # do these read requests in a temporary thread because there may be # a lot of them, so it may block. for offset, length in chunks: num = self.sftp._async_request( self, CMD_READ, self.handle, long(offset), int(length)) with self._prefetch_lock: self._prefetch_extents[num] = (offset, length)代码作者注释说明了此处可能存在并发过大的问题,所以我们对他进行修改:def _prefetch_thread(self, chunks): # do these read requests in a temporary thread because there may be # a lot of them, so it may block. max_request_num = 512 to_wait = False for offset, length in chunks: num = self.sftp._async_request( self, CMD_READ, self.handle, long(offset), int(length) ) with self._prefetch_lock: self._prefetch_extents[num] = (offset, length) if len(self._prefetch_extents) >= max_request_num: to_wait = True if to_wait: time.sleep(1) to_wait = False总体思路就是限制同时存在的异步请求总数
2024年03月25日
75 阅读
3 评论
0 点赞