博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
改进的一行Python实现文件共享--支持并发
阅读量:5862 次
发布时间:2019-06-19

本文共 2091 字,大约阅读时间需要 6 分钟。

  SimpleHTTPServer是python自带的一个简单的静态HTTP服务器, python2.x下只要切换到想要共享的目录简单地输入下面的命令,就可以打开该HTTP服务器:

python -m SimpleHTTPServer [port]

其中,port是可选参数,用于指定使用的端口,默认使用的是8000端口。

  在python3.x中,SimpleHTTPServer模块被合并进了http.server模块中,所以,python3.x中命令略有不同:

python3 -m http.server [port]

打开服务器之后,只需在任何局域网设备浏览器中输入服务器ip:port就可以查看和下载服务器指定目录的文件。如下图所示:

图1. 浏览器展示的文件目录

  这个文件服务器虽然简单,但却能充分利用局域网的带宽,为公司、家庭和学校等场景省去了U盘拷贝文件的烦恼。

  当然,正由于简单它同样存在着很多缺陷,很重要的一点就是其不支持并发, 即不能同时有多个主机访问共享的目录。为了解决这个问题,重写这个模块:

python2.x:

#!/usr/bin python# encoding: utf-8import socketimport BaseHTTPServerfrom SimpleHTTPServer import SimpleHTTPRequestHandler as SHRHfrom SocketServer import ForkingTCPServer as FTSclass ForkingHTTPServer(FTS):    passdef main(ServerHandlers = SHRH, ServerClass = ForkingHTTPServer):    BaseHTTPServer.test(ServerHandlers, ServerClass)if __name__ == '__main__':    print("Host_address:[%s]" % socket.gethostbyname(socket.gethostname()))    main()

python3.x

#!/usr/local/bin python3# encoding: utf-8import socketfrom socketserver import ForkingTCPServer as FTSimport http.serverfrom http.server import SimpleHTTPRequestHandler as SHRHclass ForkHTTPServer(FTS):    passdef test(ServerHandler=SHRH, ServerClass=ForkHTTPServer):    http.server.test(ServerHandler, ServerClass)if __name__ == '__main__':    ip_address = socket.gethostbyname(socket.gethostname())    print("Server address:[%s]" % ip_address)    test()

  上面的代码中ServerClass继承自ForkingTCPServer类,这个类是socketserver模块中ForkingMixIn和TCPServer的综合,前者实现了使用分支的方法实现了HTTP服务器的并发功能。

  将代码保存为ForkHTTPServer.py, 然后将其移动至python的库目录下(我的python2.7为/usr/lib/python2.7;python3.4为/Library/Frameworks/Python.framework/Versions/3.4/lib),使用如下命令就可以启动并发版的简易静态文件服务器了:)

[python2.7]

python -m ForkHTTPServer [port]

[python3.4]

python3 -m ForkHTTPServer [port]

这个命令还是太麻烦,对于Linux或Mac用户可以更进一步,为该命令取别名:

vim ~/.bashrc

添加:

[python2.7]

alias share="python -m /usr/lib/python2.7/ForkStaticServer"

[python3.4]

alias share="python3 -m /Library/Frameworks/Python.framework/Versions/3.4/lib/ForkStaticServer"

这样,只要在终端中输入“share”命令就可以开去文件服务器了,很方便是吧:-D

 

转载于:https://www.cnblogs.com/weixinbupt/p/4671400.html

你可能感兴趣的文章
Xcode关于警告AutomaticPreferredMaxLayoutWidth的消除方法
查看>>
设计模式[16]-Facede
查看>>
【oracle】index的几种扫描方式
查看>>
冒泡排序和二分查找
查看>>
【数字图像处理】四.MFC对话框绘制灰度直方图
查看>>
【jQuery】3.jquery选择器
查看>>
【SICP练习】114 练习3.38-3.39
查看>>
MySql 创建索引原则
查看>>
翻翻git之---溜的飞起的加载效果AVLoadingIndicatorView
查看>>
hdu 5523 Game 【BestCoder Round #61 (div.2)】
查看>>
有两种分别用<bgsound>和<embed></embed>标签,当用<embed>插入背景音乐时可以设置宽度和高度为0,隐藏播放器。...
查看>>
总结一下css中的盒子模型和position定位
查看>>
精读《Serverless 给前端带来了什么》
查看>>
细谈 vue - 抽象组件实战篇
查看>>
node的Stream解读
查看>>
分布式系统-->(关于系统应用的基本概念)
查看>>
vue中keep-alive遇到的一点坑
查看>>
数据结构之链表【上】
查看>>
拆轮子系列--RxJava理解(三)--observeOn
查看>>
设计模式系列之鸣人VS比尔.雷泽
查看>>