Python SFTP(pysftp)在发送31kb的数据时挂起

2024-10-01 07:25:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在上载到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()

缓冲区大小设置为1024。上传在块31期间无限挂起。通常只有一半的jpg图片被上传(也就是说,每个图片的上半部分)。在

这是pysftp中报告的bug吗?如何解决?在


Tags: 服务器forsizebufferftp图片mathchunks
2条回答

我在32767(2^15-1)左右看到了一些限制。我怀疑sftp_file_write正在缓冲发送的数据包,直到它填充了一个内部缓冲区,然后尝试一次发送所有数据包。在

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

谢谢jcopens。我找到了一个解决方案(多亏了StackOverflow上的另一个人)。在

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

到目前为止对我来说还不错。在

相关问题 更多 >