摘要:擴展支持多用戶并發(fā)訪問與線程池。項目請見初學網(wǎng)絡(luò)編程之服務(wù)器。不允許超過磁盤配額。該文件是一個使用模塊編寫的線程池類。這一步就做到了線程池的作用。
對MYFTP項目進行升級。擴展支持多用戶并發(fā)訪問與線程池。MYFTP項目請見python初學——網(wǎng)絡(luò)編程之FTP服務(wù)器。
擴展需求1.在之前開發(fā)的FTP基礎(chǔ)上,開發(fā)支持多并發(fā)的功能
2.不能使用SocketServer模塊,必須自己實現(xiàn)多線程
3.必須用到隊列Queue模塊,實現(xiàn)線程池
4.允許配置最大并發(fā)數(shù),比如允許只有10個并發(fā)用戶
MYFTP
場景when:任意時間
where:任何地點
who:FTP用戶
用例描述ftp使用用戶名密碼登錄。密碼需要加密認證、允許支持多用戶登錄。
每個用戶有自己的家目錄,所有的訪問必須限制在用戶的家目錄。但在家目錄中創(chuàng)建的目錄可以進行目錄切換。
用戶的目錄有磁盤配額。不允許超過磁盤配額。
用戶可以查看當前目錄下的文件列表。
用戶可以上傳和下載文件,并且保證文件的一致性。
文件的傳輸過程中顯示精度條。
支持斷點續(xù)傳。
支持多用戶并發(fā)訪問
支持線程池
用戶價值實現(xiàn)一套自己的FTP服務(wù)端與客戶端。
約束線程池使用Queue模塊實現(xiàn)
建模設(shè)計 UML圖 順序圖登錄順序圖
請從github下載后使用
MYFTP
README
在原來的lib目錄中增加一個mythread.py的文件。該文件是一個使用Queue模塊編寫的線程池類。
+---bin # 執(zhí)行程序目錄 | create_user.py # 創(chuàng)建用戶程序 | myftpc.py # ftp_server啟動程序 | myftps.py # ftp_client啟動程序 | __init__.py | +---conf | | settings.py # 配置文件 | | __init__.py | | | ---__pycache__ | +---core | | logger.py # 日志生成文件 | | main.py # 主程序文件 | | __init__.py | | | ---__pycache__ | +---db # 數(shù)據(jù)庫目錄 | ---accounts # 賬號表目錄 |---id_user_rs.json # 賬號ID與用戶名對應(yīng)關(guān)系 +---file_upload # ftp文件服務(wù)器目錄 +---lib # 類文件 | | account.py # 賬號類 | | db.py # 數(shù)據(jù)庫類 | | myftp_client.py # ftp客戶端類 | | myftp_server.py # ftp服務(wù)端類 | | mythread.py # 線程池類(新增加內(nèi)容) | | process.py # 進度條展示類(暫時未使用) | | __init__.py | | | ---__pycache__ ---log __init__.pymythread.py文件介紹
mythread使用隊列簡單實現(xiàn)了一個線程池的功能。
實現(xiàn)的方式比較簡單,就是通過在隊列中存放maxsize的線程對象。當客戶端連接服務(wù)端后時從隊列中拿取一個線程對象,創(chuàng)建自己的任務(wù)。執(zhí)行完任務(wù)后再往隊列中添加一個新的線程對象。
# -*-coding: utf-8 -*- # Auther: Henry Yuan import threading import time import queue class MyThread(): """ 自定義的線程類,使用queue支持簡單的線程池 """ def __init__(self,maxsize): """ :param maxsize: 隊列的數(shù)量 """ self.maxsize=maxsize self.q=queue.Queue(maxsize) # 初始化一個隊列對象 # 在隊列中先存放maxsize個隊列對象。這一步就做到了線程池的作用。 for i in range(maxsize): self.q.put(threading.Thread) # 在隊列中先存放線程對象 def get_thread(self): """ 從隊列中拿取線程對象 :return: """ return self.q.get() def put_thread(self): """ 往隊列中存放線程對象 :return: """ self.q.put(threading.Thread)環(huán)境
本系統(tǒng)基于python 3.6版本開發(fā)。可運行在安裝了python 3.6版本的linux或windows系統(tǒng)中。
用法 創(chuàng)建FTP用戶進入bin目錄:
> cd bin
執(zhí)行create_user.py:
> python ./create_user.py
Account:test2 # 用戶名 Password:test2 # 密碼 Home directory(test2): # 賬號的根目錄。默認為賬號名稱 Quota(bytes):10 # 賬號的quota。默認為1G ===================ACCOUNT INFO=================== Account: test2 Home Dir: test2 Quota: 10 ==================================================啟動ftp服務(wù)端
進入bin目錄:
> cd bin
執(zhí)行create_user.py:
> python ./myftps.py啟動ftp客戶端
進入bin目錄:
> cd bin
執(zhí)行create_user.py:
> python ./myftpc.py
FTP用于登錄:
Name:test2 Password:test2 Account [test2] login successful ftp>:客戶端命令
ls: 查看用戶當前目錄的文件和目錄列表
ftp>: ls 驅(qū)動器 D 中的卷是 新加卷 卷的序列號是 020D-6062 D:deploymentMYFTPfile_upload est2 的目錄 2018/04/16 12:17. 2018/04/16 12:17 .. 0 個文件 0 字節(jié) 2 個目錄 45,605,543,936 可用字節(jié) Directory [test2] list successful. ftp>:
pwd: 查看當前所在目錄
ftp>: pwd Directory [] show successful.
mdir: 創(chuàng)建目錄
ftp>: mdir temp_dir Directory [temp_dir] create successful.
cd:切換目錄
ftp>: cd temp_dir Directory [temp_dir] change successful.
put: 上傳文件-支持斷點續(xù)傳
ftp>: get temp_file.md Start download -----> temp_file.md trandata: %s b"test123" [>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>]100% recvsize:7, filesize:7 File [temp_file.md] download successful.
get: 下載文件-支持斷點續(xù)傳
ftp>: put temp_file.md [>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>]100% File [temp_file.md] upload successful.
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/41686.html
摘要:并可以實現(xiàn),功能對用戶進行磁盤配額,每個用戶的可用空間不同使用模塊檢查用戶目錄的空間上文件大小,如果大于就不讓傳輸。不允許超過磁盤配額。文件的傳輸過程中顯示精度條。用戶價值實現(xiàn)一套自己的服務(wù)端與客戶端。 MYFTP是我寫的模擬FTP服務(wù)端和客戶端交互的程序。通過使用socket去模擬ftp的文件下載與上次兩個核心功能。并不是使用真實FTP協(xié)議去實現(xiàn)。 基本需求 用戶加密認證 # ha...
摘要:入門,第一個這是一門很新的語言,年前后正式公布,算起來是比較年輕的編程語言了,更重要的是它是面向程序員的函數(shù)式編程語言,它的代碼運行在之上。它通過編輯類工具,帶來了先進的編輯體驗,增強了語言服務(wù)。 showImg(https://segmentfault.com/img/bV1xdq?w=900&h=385); 新的一年不知不覺已經(jīng)到來了,總結(jié)過去的 2017,相信小伙們一定有很多收獲...
閱讀 742·2023-04-25 19:28
閱讀 1400·2021-09-10 10:51
閱讀 2397·2019-08-30 15:55
閱讀 3420·2019-08-26 13:55
閱讀 3009·2019-08-26 13:24
閱讀 3335·2019-08-26 11:46
閱讀 2763·2019-08-23 17:10
閱讀 1424·2019-08-23 16:57