成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

python初學——網(wǎng)絡(luò)編程之FTP服務(wù)器支持多并發(fā)版本

oysun / 3755人閱讀

摘要:擴展支持多用戶并發(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

目錄結(jié)構(gòu)

在原來的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__.py
mythread.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

相關(guān)文章

  • python初學——網(wǎng)絡(luò)編程FTP務(wù)器

    摘要:并可以實現(xiàn),功能對用戶進行磁盤配額,每個用戶的可用空間不同使用模塊檢查用戶目錄的空間上文件大小,如果大于就不讓傳輸。不允許超過磁盤配額。文件的傳輸過程中顯示精度條。用戶價值實現(xiàn)一套自己的服務(wù)端與客戶端。 MYFTP是我寫的模擬FTP服務(wù)端和客戶端交互的程序。通過使用socket去模擬ftp的文件下載與上次兩個核心功能。并不是使用真實FTP協(xié)議去實現(xiàn)。 基本需求 用戶加密認證 # ha...

    TZLLOG 評論0 收藏0
  • Python

    摘要:最近看前端都展開了幾場而我大知乎最熱語言還沒有相關(guān)。有關(guān)書籍的介紹,大部分截取自是官方介紹。但從開始,標準庫為我們提供了模塊,它提供了和兩個類,實現(xiàn)了對和的進一步抽象,對編寫線程池進程池提供了直接的支持。 《流暢的python》閱讀筆記 《流暢的python》是一本適合python進階的書, 里面介紹的基本都是高級的python用法. 對于初學python的人來說, 基礎(chǔ)大概也就夠用了...

    dailybird 評論0 收藏0
  • SegmentFault 技術(shù)周刊 Vol.40 - 2018,來學習一門新的編程語言吧!

    摘要:入門,第一個這是一門很新的語言,年前后正式公布,算起來是比較年輕的編程語言了,更重要的是它是面向程序員的函數(shù)式編程語言,它的代碼運行在之上。它通過編輯類工具,帶來了先進的編輯體驗,增強了語言服務(wù)。 showImg(https://segmentfault.com/img/bV1xdq?w=900&h=385); 新的一年不知不覺已經(jīng)到來了,總結(jié)過去的 2017,相信小伙們一定有很多收獲...

    caspar 評論0 收藏0

發(fā)表評論

0條評論

oysun

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<