关于python的socket库超大文件传输问题

发布于 2022-09-03 15:04:06 字数 936 浏览 10 评论 0

萌新正在学习socket编程,在本地(localhost)进行超大文件传输,比如说7G大的文件。我按照网上的例子和相关资料理解,写出来能正常运行,7g文件也能传。但有几个问题想请教一下。

  1. 我用的是python的SocketServer写服务端,socket写客户端,传输方式用ftp,用stream流设置buffer_size为4096传输文件。我所理解是connect一瞬间,就是客户端和服务端建立了长连接,而且是IO堵塞的。然而不太明白在打开文件之前和关闭文件之后原demo的作者都用了time.sleep(1)就是等待1秒后再继续执行,这是为了什么?我一开始觉得多余的,但马上发现这样很容易会卡死。

比如以下代码:

# Func to send file
def sendfile(filename):
    print 'You are sending %s' %filename
    print 'Everything on set, client is about to send file.'
    time.sleep(1)
    f = open(filename, 'rb')
    while True:
        data = f.read(buffer_size)
        if not data:
            break
        s.sendall(data)
    f.close()
    time.sleep(1)
    s.sendall('EOF')
    print 'File had been sent successfully!'
    

2.大文件传输被刻意强调了,但是由于没遇到障碍(翻了翻网上的资料,很多特别强调大文件传输遇到困难了)。所以我就想应该得特殊处理以下,然而我这里却没遇到问题,除了传输文件大所以等待时间长一点会出现假死,但除此之外不知道要如何优化才好?

思路也可以,推介资源也可以,非常感谢!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

匿名。 2022-09-10 15:04:06

把 sendfile 放到线程中执行~

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文