python实现文件共享_改进的一行Python实现文件共享--支持并发
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-8
importsocketimportBaseHTTPServerfrom SimpleHTTPServer importSimpleHTTPRequestHandler as SHRHfrom SocketServer importForkingTCPServer as FTSclassForkingHTTPServer(FTS):pass
def 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-8
importsocketfrom socketserver importForkingTCPServer as FTSimporthttp.serverfrom http.server importSimpleHTTPRequestHandler as SHRHclassForkHTTPServer(FTS):pass
def 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
總結
以上是生活随笔為你收集整理的python实现文件共享_改进的一行Python实现文件共享--支持并发的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: u盘插电脑不能用怎么回事 U盘连接电脑失
- 下一篇: 上标3下标6算法_插入排序算法导学案