关于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.大文件传输被刻意强调了,但是由于没遇到障碍(翻了翻网上的资料,很多特别强调大文件传输遇到困难了)。所以我就想应该得特殊处理以下,然而我这里却没遇到问题,除了传输文件大所以等待时间长一点会出现假死,但除此之外不知道要如何优化才好?
思路也可以,推介资源也可以,非常感谢!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
把 sendfile 放到线程中执行~