Posts for: #Python

Parallel, Concurrent and Distributed

1. 平行 (Parallel)

  • 概念:指多個任務在同一時間真正地同時執行。需要硬體支持,比如多核處理器,每個核心可以同時處理不同的任務。
  • 特點
    • 必須有多個物理處理單元(例如 CPU 核心)。
    • 通常用於計算密集型任務,如科學計算、大數據處理等。
    • 範例:圖像處理中,同時處理多個像素或區塊。
  • 關鍵詞:真正的“同時”。

2. 併發 (Concurrent)

  • 概念:指多個任務在邏輯上同時進行,但並不一定是物理上的同時進行。任務可能交替執行,依賴於調度機制。
  • 特點
    • 並行不要求多核處理器。
    • 通常用於 I/O 密集型任務(如網絡請求、文件讀寫),藉助時間分片來切換任務。
    • 範例:多人輪流在同一部電腦上打字。
  • 關鍵詞:邏輯上的“同時”。

3. 分散 (Distributed)

  • 概念:指多個任務分布在多個不同的計算節點上協同完成工作,這些節點通常是通過網絡連接的。
  • 特點
    • 涉及多台物理機器。
    • 節點之間通過通信協議(如 HTTP、gRPC)進行協作。
    • 範例:Hadoop、Spark 等大數據框架。
  • 關鍵詞:多機器、分布式系統。

4. 異步 (Asynchronous)

  • 概念:指在任務執行時,不需要等待當前任務完成,主線程可以繼續執行其他任務,等結果準備好後再處理。
  • 特點
    • 適合處理高延遲的 I/O 操作。
    • 通常用回調函數、Promise 或 async/await 模式來實現。
    • 範例:發起一個網絡請求後,繼續執行其他代碼,網絡響應返回時再處理。
  • 關鍵詞:非阻塞、回調、事件驅動。

5. 線程 (Thread)

  • 概念:是操作系統分配 CPU 資源的基本單位,每個線程都在進程內運行,共享進程的內存空間。
  • 特點
    • 多線程在同一進程內執行。
    • 線程之間共享內存資源,但也容易引發競爭條件。
    • 範例:在一個應用程式中,同時執行文件下載和數據分析。
  • 關鍵詞:共享內存、輕量級。

6. 進程 (Process)

  • 概念:是操作系統分配資源的基本單位,每個進程有自己獨立的內存空間。
  • 特點
    • 不同進程之間的內存是隔離的,通過 IPC(如管道、共享內存)進行通信。
    • 範例:在一台電腦上,同時運行瀏覽器和文檔編輯器。
  • 關鍵詞:獨立內存、重量級。

比較總結

特性 平行 (Parallel) 並行 (Concurrent) 分散 (Distributed) 異步 (Asynchronous) 線程 (Thread) 進程 (Process)
同時性 真正的同時執行 邏輯上的同時執行 節點間協同執行 非阻塞執行 多線程共享內存並行執行 多進程獨立內存並行執行
硬體要求 多核處理器 無需多核 多台機器 無需多核 單機多核 單機或多機(分布式)
資源共享 有(同一台設備) 依情況 依情況 共享內存 獨立內存
使用場景 高性能計算 I/O 密集 分布式數據處理 高延遲操作 輕量級並行 重量級隔離和獨立進程控制

關係與區分

Read more

Use uv to create a python project for finance text sentimental analysis

references: https://www.youtube.com/watch?v=EeoCcjPuJwE&list=PLDdSOnH0h1PpCo1novB32KXP5mbpCw-s5&index=19

使用 uv 快速建立財務文字情感分析專案

uv 是一個簡單高效的 Python 專案初始化工具,結合了虛擬環境管理和依賴配置,適合開發者快速啟動專案。在這篇文章中,我將分享如何使用 uv 建立 Financial Text Sentimental Analysis 專案。


什麼是 uv

uv 是一款輕量級工具,專注於:

  • 快速初始化專案:透過一行指令生成清晰的專案結構。

  • 基於 **pyproject.toml**:完全符合 Python 現代化的標準配置。

  • 虛擬環境自動管理:自動為每個專案創建虛擬環境,簡化操作流程。

它適合希望以簡單方式管理專案的開發者,並能提升開發效率。


使用 uv 開始專案

步驟 1:安裝 uv

在 macOS 上,您可以透過 Homebrew 安裝 uv

brew install uv

步驟 2:初始化專案

執行以下指令以初始化專案:

uv init Financial-Text-Sentimental-Analysis

執行後,uv 將生成以下的初始專案結構:

├─ README.md
├─ hello.py
└─ pyproject.toml

步驟 3:配置專案依賴

pyproject.toml 中設定專案所需的依賴:

[project]
name = "financial-text-sentimental-analysis"
version = "0.1.0"
description = "A project to analyze the sentiment of financial text"
readme = "README.md"
requires-python = ">=3.12"
dependencies = [
    "torch",
    "transformers",
    "feedparser",
    "requests",
]

這些依賴分別用於:

Read more

Python 與 SQL 日期時間轉換處理

在做資料清洗和轉換時,時常會需要進行日期時間的清洗和轉換,用來篩選特定時間的資料或統一格式。

在 Python,可以透過 datetime 物件的 strptime 和 strftime 函數來實現,而在 PostgreSQL 中則可以利用內建的日期函數和格式化工具達成。

本教學將介紹如何分別使用 Python 和 PostgreSQL 處理日期的各種轉換操作,包括今天日期、昨天日期與上個月的格式化處理。


Python 範例

以下使用 datetime 模組來完成日期轉換:

from datetime import datetime, timedelta

# 1. 得到今天日期,格式(yyyymmdd),型態 date
today_date = datetime.today().date()
print("今天日期 (date):", today_date)

# 2. 將今天日期轉為字串
today_str = today_date.strftime('%Y%m%d')
print("今天日期 (字串):", today_str)

# 3. 取得昨天日期,型態 date
yesterday_date = today_date - timedelta(days=1)
print("昨天日期 (date):", yesterday_date)

# 4. 將昨天日期轉為字串
yesterday_str = yesterday_date.strftime('%Y%m%d')
print("昨天日期 (字串):", yesterday_str)

# 5. 取得上個月,格式(yyyymm),型態字串
last_month = (today_date.replace(day=1) - timedelta(days=1)).strftime('%Y%m')
print("上個月 (字串):", last_month)

輸出範例:

今天日期 (date): 2024-12-08
今天日期 (字串): 20241208
昨天日期 (date): 2024-12-07
昨天日期 (字串): 20241207
上個月 (字串): 202411

PostgreSQL 範例

在 PostgreSQL 中,可以使用 SQL 查詢進行類似的日期操作:

Read more