2021年11月28日 星期日

[Python] asycio工作原理淺談

 

什麼是 asyncio

asyncio 是 Python 內建的module,在 Python 3.4 時加入

是一種單 thread 的設計,它靠著 cooperative multitasking (協同運作式多工) 讓我們能多個工作併發處理 (concurrent)

協同運作式多工相對於搶佔式多工(Preemptive multitasking),協作式多工要求每一個運行中的程式,定時放棄自己的執行權利,告知作業系統可讓下一個程式執行

多線程採用的是搶佔式多工,多線程是由作業系統做排程,線程執行任務途中會被外力(作業系統)中斷改排其他線程執行,而協同運作式多工不由作業系統排程,在任務執行時遇到需要等待回應的狀況,會放棄執行權,改執行別的任務,而原任務在等到回應後再繼續執行

這篇文章主要是大概介紹 asyncio是如何做到 cooperative multitasking

在介紹 asyncio 是怎麼做到 cooperative multitasking,首先需要知道什麼是Coroutine與Event Loop

2021年11月25日 星期四

[PostgreSQL] 常用SQL指令集

 

- 查詢Table的某筆資料

select "欄位名" from "表格名" where "條件"

範例:

select * from tb_customer where customer_id='xxxxxx';

select name from tb_customer where customer_id='xxxxxx' order by age asc;      (order by "欄位名" [desc, asc])

2021年11月17日 星期三

RabbitMQ (6):使用 RabbitMQ 建立 RPC system

 

什麼是RPC

RPC 全名 Remote Procedure Callback,是一種電腦通信協定,該協定允許執行於一台電腦的程式呼叫另一個位址空間(通常為一個開放網路的一台電腦)的子程式

程式碼看起來就像呼叫一般的函式,但其實底層是呼叫遠端別的程式的函式

RabbitMQ (5):路由設定與Exchange種類

RabbitMQ 提供各種 routing 方法,讓我們能在傳送消息上做到各種變化以適應各種條件問題

前幾章大概說明了消息的傳輸路徑,先來看第一站:Exchange 元件

RabbitMQ 提供了四種 Exchange

RabbitMQ (4):Message Acknowledgments與Durability

 

Message Acknowledgments

RabbitMQ 提供了 Message Acknoledgments (簡稱ack) 的功能,讓我們能確保消息有準確傳達,以及正確執行

RabbitMQ (3):Python實作RabbitMQ Producer端與Consumer端

 

Producer 端實作

使用 python pika client library 實作簡單的 Producer 端發送訊息到 MQ 裡

pika doc:https://pika.readthedocs.io/en/stable/

RabbitMQ (1):RabbitMQ基本介紹


什麼是 RabbitMQ? 


RabbitMQ 是 message broker (消息代理) 軟體

當中傳輸消息的協定是使用 AMQP (Advanced Message Queuing Protocol,高級消息隊列協議)

RabbitMQ (2):使用Docker建立RabbitMQ測試環境

 
使用 Docker 建立 RabbitMQ 測試環境吧!

2021年11月16日 星期二

[Python] Threading (5):concurrent.futures.ThreadPoolExecutor 介紹

concurrent.futures module提供python異步執行的高階interface

https://docs.python.org/3/library/concurrent.futures.html


這裡介紹當中的 ThreadPoolExecutor,當你有一個工作可以切分成多塊重複執行時,可以透過使用 ThreadPoolExecutor 建立多個 thread 併發跑。

[Python] Threading (4):threading.local() 介紹

 

什麼是 threading.local()

透過創建 threading.local() 我們可以建立 thread 的 local storage

local 物件為 thread-specific,每個 thread 的值各自獨立,不會互影響

[Python] Threading (3):Race Condition與Thread-Safe


上章學會了 Python Thread 的基本寫法

這章要講的是當你的程式用到 multi-thread ,有個一定要小心的問題,那就是:Race Condition

 

[Python] Threading (2):Hello Thread 建立第一個 Multithread 程式


承接上一章,我們大概了解了 Python Multithreading 的一點概念,接下來就是實際實作。

基本上在 Python 實作 multithread 程式一定會用到 Python 內建的 threading 模組
threading module 官方文件:https://docs.python.org/zh-tw/3/library/threading.html

[Python] Threading (1):什麼是多執行緒Multithreading

 

多執行緒(multithreading)技術能讓程序(process)運行多個執行緒(thread)達到平行執行,透過平行執行我們能更快得到計算結果。