本專案示範如何使用 Flask 搭配 Flask‑Executor 建立非同步任務平台,具備使用者系統與管理者介面,同時支援 fractal
與 primes
兩種範例任務。
- Flask + Flask-Login:提供登入 / 登出,以及使用者任務列表
- Flask‑Executor:以背景執行緒處理非同步任務,透過
subprocess
呼叫指定虛擬環境中的 Python 腳本 - 任務輸出管理:所有結果檔案儲存在
outputs/<task_id>/
,並自動產生result.json
- 管理者介面:新增、編輯或刪除使用者,並檢視任務統計、搜尋及封存任務
- 任務刪除:一般使用者可刪除自己的任務,移除輸出檔案以節省空間,記錄仍供管理者統計
flask-task-platform/
├── service/ # 應用程式模組
│ ├── flask_app.py # 主 Flask 應用
│ ├── tasks.py # 定義背景任務執行流程
│ ├── models.py # SQLAlchemy 資料模型
│ ├── admin_routes.py
│ ├── user_routes.py
│ ├── config_utils.py
│ ├── scripts/ # 任務腳本
│ │ ├── run_fractal.py
│ │ ├── run_primes.py
│ │ └── run_sparams.py
│ ├── templates/ # HTML 範本
│ └── static/ # 靜態資源
├── task_config.yaml # 任務腳本與虛擬環境設定
├── requirements.txt # 相依套件列表
├── .gitignore # Git 忽略清單
└── outputs/ # 任務輸出目錄(程式執行中自動建立)
以下安裝指引適用於已安裝 ANSYS Electronics Desktop (AEDT) 且可連線至 License Server 的 Windows 工作站。 請依照以下步驟操作:
-
確認 Windows 工作站:
- 已安裝 AEDT 並能正常開啟。
- 能夠連線至公司內部的 License Server。
- 具有穩定的網際網路連線。
-
檢查系統需求:
- 建議作業系統:Windows 10 64-bit 或以上。
- Python 3.8 至 3.11。
- 從 GitHub 或內部資源下載
sim_service-master.zip
。 - 將壓縮檔解壓至欲安裝的資料夾(例如:
C:\sim_service-master
)。
-
開啟 命令提示字元 (CMD),切換至解壓後的資料夾:
cd C:\sim_service-master
-
執行安裝批次腳本:
install_venv.bat
- 此腳本將建立 Python 虛擬環境並安裝所需套件。
- 期間若提示權限問題,請以系統管理員權限重新執行。
-
若步驟 3 成功完成,執行:
start.bat
-
程式啟動後,Console 會顯示伺服器對外的 IP 位址與連接埠,例如:
Server will be available at http://192.168.0.10:5000
身份 | 帳號 (Username) | 密碼 (Password) | 說明 |
---|---|---|---|
一般使用者 | abc |
1234 |
可使用基礎功能 |
管理者 (Admin) | admin |
admin |
具備管理介面權限 |
- 在瀏覽器中輸入步驟 4 顯示的網址。
- 輸入上述帳號與密碼進行登入測試。
若欲從其他電腦瀏覽此網站,需確認下列事項:
-
伺服器端已開放 5000 埠(TCP):
-
可透過防火牆例外或手動設定防火牆開啟。
-
指令參考(需管理員權限):
netsh advfirewall firewall add rule name="SimService Port 5000" dir=in action=allow protocol=TCP localport=5000
-
-
用戶端電腦與伺服器在同一區網或網段可互通。
-
用戶端瀏覽器輸入伺服器顯示的 IP 與連接埠,例如:
http://192.168.0.10:5000
-
驗證是否能夠正常顯示登入頁面並進行登入操作。
- Fractal:輸入深度
--depth
,於outputs/<task_id>/fractal.png
產生 Sierpinski 三角形圖檔,並將檔案列表與狀態寫入result.json
- Primes:輸入上限
--n
,於outputs/<task_id>/result.csv
輸出所有小於 N 的質數 - Sparams:上傳任意埠數的 Touchstone 檔案(副檔名
.sNp
,N
為任意整數),於outputs/<task_id>/
產生各組 S-parameter 圖檔與index.html
。index.html
中的搜尋框支援輸入正規表示式過濾檢視的圖檔 - Microstrip:模擬微帶傳輸線並輸出
microstrip.png
,需要安裝pyaedt
並連線 ANSYS Electronics Desktop - ReadPCB:上傳
.brd
產生壓縮後的 AEDB 與stackup.xlsx
,result.html
顯示堆疊表 - UpdateStackup:上傳 AEDB 壓縮檔與修改後的
xlsx
,可選擇 AEDT 版本,回傳更新後的 AEDB 壓縮檔並以 HTML 呈現新的堆疊表
- 設定管理者帳號:手動在資料庫中將
User.is_admin
欄位設為True
- 管理者登入後瀏覽
/admin
,可檢視所有使用者、任務統計、搜尋或封存任務 - 管理者帳號僅提供管理功能,無法提交任務
執行 python -m service.stress_jobs --iterations 100 --rate 0.5 --seed 42
即可隨機向所有任務類型提交作業,測試系統在大量請求下的穩定性。--rate
表示平均每秒提交的作業數,可搭配 --seed
控制分布。