搜索

首页  >  问答  >  正文

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

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

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

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


高洛峰高洛峰2974 天前881

全部回复(1)我来回复

  • 三叔

    三叔2016-10-28 14:31:47

    把 sendfile 放到线程中执行~

    回复
    0
  • 取消回复