发送31kb数据时,Python SFTP(pysftp)会挂起

时间:2015-06-06 01:38:53

标签: python pysftp

我正在上传到FTP服务器:

  chunks = math.ceil(size / BUFFER_SIZE)
  print('SFPTField: Uploading stream of length %s, chunks %d' % (size, chunks))

  for i in range(chunks):
        print('SFTPField: Writing chunk %d...' % (i + 1))
        b = buffer.read(BUFFER_SIZE)
        if len(b) == 0:
              break
        sftp_file.write(b)

        print('SFTPField: DONE for chunk %d...' % (i + 1))

  sftp_file.flush()
  sftp_file.close()

BUFFER_SIZE设置为1024.在块31期间上传无限挂起。通常只有一半的图像jpg图像上传(即每个上半部分)。

这是pysftp中报告的错误吗?怎么解决?

2 个答案:

答案 0 :(得分:0)

我在32767(2 ^ 15-1)附近看到了一些限制。我怀疑sftp_file_write正在缓冲已发送的数据包,直到它填充内部缓冲区,然后尝试立即发送它。

尝试在每个flush()之后(在循环中)在循环中添加write()

答案 1 :(得分:0)

谢谢jcoppens。我找到了一个解决方案(感谢StackOverflow上的另一个人)。

channel = server.sftp_client.get_channel()
channel.lock.acquire()
channel.out_window_size += size
channel.out_buffer_cv.notifyAll()
channel.lock.release()

到目前为止,它对我很有用。