Python 程式設計 - 中階

multiprocessing 模組進階篇 - Pipe, Queue, Array, RawArray 以及 Structure 之教學範例

用範例輕鬆學 Python multiprocessing 模組 一文中提到 4 種 IPC(Inter Process Communication)方法,分別是:

  • 以參數(args)的方式傳遞資料
  • 以共享記憶體(Shared Memory)中的 Value 物件傳遞資料
  • 以 fork 方式傳遞資料, fork 出來的子 process 會繼承父 process 的資源,所以可以存取原本父 process 內的資料
  • 透過 Manager 共享資料, Manager 會在一個稱為 server process 的 process 中管理共享的資料,並且代理其他 process 操作這些共享資料

除了上述幾種方式之外, Python 也有提供其他方式滿足開發者對於 IPC(Inter Process Communication) 的相關需求,本文將額外介紹 Pipe, Queue, Array, RawArray 4 種方式。

Posted on  Aug 7, 2023  in  Python 程式設計 - 中階  by  Amo Chen  ‐ 5 min read

Python subprocess 模組使用教學

有時候開發功能不需要從頭寫到尾,利用他人開發的函式庫(library), API 之外,也可以整合既有的指令工具,不僅可以節省開發時間,也能夠完成需求。

我的碩士論文就是用 Python 作為膠水語言整合各種指令工具所完成的, Python 的 subprocess 模組在其中扮演不可獲缺的角色, subprocess 模組讓人可以執行各種指令,例如常見的 awk, sort, sed, uniq 等指令,並擷取其輸出(stdout / stderr),讓 Python 程式可以讀取,並進一步做其他處理。

本文將介紹 Python subprocess 模組的使用方法,以及應該注意的資安問題。

Last updated on  Jul 26, 2024  in  Python 程式設計 - 中階  by  Amo Chen  ‐ 5 min read

你應該要知道的 Python 實用模組 - functools 教學

functools 模組是 Python 內建專門提供各種實用裝飾子(decorator)以及實用函式(function)的模組。

functools 模組最常被使用的功能主要為:

學會正確使用 functools 不僅可以提升效能,也可以有效地提升程式碼的簡潔性。

本文將以實際範例介紹 functools 模組中常用的功能。

Posted on  Apr 10, 2023  in  Python 程式設計 - 中階  by  Amo Chen  ‐ 6 min read

新世代的 Python Linter - Ruff

自從 Rust Programming Language 開始展露頭角之後,很多工具都開始見到 Rust 的影子,或是底層由 Rust 重寫,或是關鍵部分由 Rust 實作,這些由 Rust 所改寫的工具幾乎都有個共通點 —— 快!

Ruff 就是 1 套底層由 Rust 實作的 Python Linter, 號稱速度快上其他常見的 Linter 約 10 ~ 100 倍之間,同時支援快取(cache)、自動修正(autofix)、Python 3.11, 甚至還提供 pre-commit 以及 VS Code 擴充(extension)等功能,除了用心還有貼心!

另外其功能近乎 Flake8 的完整功能(詳見 FAQ - Ruff ),因此許多人也放心選擇使用 Ruff 作為其開發時的 Linter 使用,包含 FastAPI, pandas, Apache Airflow 等開發團隊都已經使用 Ruff 作為其 Linter!

一起來認識 Ruff 這個新世代的 Python Linter 吧!

Posted on  Mar 23, 2023  in  Python 程式設計 - 中階  by  Amo Chen  ‐ 4 min read

看了肯定會的 Python 裝飾子(decorator)教學

Python 的 decorator (或稱裝飾子)是一個非常有用的功能,它的重要程度可以說是沒用過或不會用 decorator 的人就等於沒學過 Python, 甚至在一些常見的框架(Framework),例如 Flask, FastAPI, Django 都提供各種方便的 decorator 供大家使用。

這麼重要的東西,肯定是闖江湖都會用到的金創藥啊!

但如果你剛接觸 Python 就看到類似以下裝飾子的範例,絕對會腦袋打結,為什麼函式前面還要加個 @debug 還有 @cache, 而且還很神奇能運作:

@debug
@cache
def sum(a, b):
    return a + b

本文就教大家如何理解 Python 的 decorator!

Last updated on  Mar 10, 2023  in  Python 程式設計 - 中階  by  Amo Chen  ‐ 6 min read

Python 模組教學 - 方便又實用的 dataclasses

Python dataclasses 是 Python 3.7 新增的 1 個模組(module),主要用途是將結構化的資料定義成類別(class)的形式。

dataclasses 模組提供了一些方便的功能幫助自動產生常用的類別方法,如 __init__ , __repr__ , __eq__ 等,節省開發者撰寫重複程式碼的時間成本。

使用 dataclasses 可以讓 Python 程式更加簡潔,並且提高程式碼的可讀性。

準備好在你的 Python 程式碼中大秀一手使用 dataclasses 的技巧了嗎?

Posted on  Feb 1, 2023  in  Python 程式設計 - 中階  by  Amo Chen  ‐ 5 min read

Python multiprocessing 模組進階說明與範例

先前 Python multiprocessing 模組簡單說明與範例 一文簡述 multiprocessing 模組中 Pool, Manager 的使用方法,也講述如何在多個 Processes 之間共享資料,不過仍有許多關於 multiprocessing 中的功能尚未詳述,例如 Process 類別(class), Queue, Pipe 等等,這些功能不僅重要也很實用,是邁向 Python 高階功能的必學項目,因此不可忽視。

本文將透過實際範例了解更多關於 multiprocessing 模組中實用的功能。

Posted on  May 1, 2021  in  Python 程式設計 - 中階  by  Amo Chen  ‐ 11 min read