顯示具有 Python 標籤的文章。 顯示所有文章
顯示具有 Python 標籤的文章。 顯示所有文章

以 RabbitMQ 實作 Publish/Subscribe 模型(Python 版本)

這裡我們使用 RabbitMQ 來實作 publish-subscribe pattern,將訊息一次傳送給多個 consumers。

前一個範例中,我們實作的工作佇列都是假設一個工作只會配送給一個 worker,現在我們要改變一下這個規則,讓一個訊息可以同時傳送給多個 consumers,而這樣的設計模式就稱為 publish/subscribe

RabbitMQ Logo

以 RabbitMQ 實作工作佇列(Work Queues)(Python 版本)

這裡介紹如何使用 RabbitMQ 實作工作佇列(work queues),將耗時的工作分配至多個 works 來處理。


在上一個 RabbitMQ 訊息佇列教學中,我們實作一個可以透過 queue 傳送與接收訊息的簡單架構,這裡我們將繼續修改之前的範例程式碼,加入工作處理的功能。

用 Python 的 SimpleHTTPServer 模組快速建立一個臨時網頁伺服器(Web Server)

如果你需要一個簡單的 Web 伺服器做一些臨時性的工作,但又不想花很多時間去安裝像 Apache 這樣完整的網頁伺服器,那你可以試試看 Python 的 SimpleHTTPServer 模組,使用這個模組可以讓任何的目錄中的資料立即放上網路,而且不需要安裝其餘任何軟體,只需要 Python 就夠了。


就實際的應用來說,這樣的方式可以讓你很方便的在區域網路(local network)中分享資料,而要使用這個迷你的網頁伺服器也非常簡單,只要一行指令就可以了。

假設你的電腦 IP 位址為 192.168.0.1,而想要分享 /home/seal 中的資料,則先切換到該目錄中:
cd /home/seal
再啟動 Python 的網頁伺服器:
python -m SimpleHTTPServer
就這樣一行指令就完成了!非常方便。執行這行指令應該會看到這樣的輸出訊息:
Serving HTTP on 0.0.0.0 port 8000 ...
這個訊息是告訴你網頁伺服器所開啟的 port 是 8000,這時候你可以開啟瀏覽器測試一下,再瀏覽器上輸入以下的網址:
http://192.168.0.1:8000/
這樣就可以看到分享的網頁了。如果是在自己的電腦上要看自己的伺服器所分享的網頁,也可以輸入這樣的網址:
http://127.0.0.1:8000
如果被分享的目錄中有 index.html 這個網頁檔,則開啟這個目錄時,預設就會顯示這個網頁檔,而如果這個檔案不存在,則會自動顯示該目錄中的檔案列表。

SymPy:使用 Python 幫你導煩人的數學公式(一)

SymPy 是一個可以進行數學代數運算的 Python 模組,他的發展目標是一個完整的電腦代數系統,而此模組完全都是使用 Python 寫成的,所以不需要依賴其他的函式庫。

準備 SymPy 環境

在 Ubuntu 或 Debian Linux 中若要安裝 SymPy,可以直接使用 apt 安裝:

sudo apt-get instlal python-sympy

裝完之後,接著就可以執行 Python 了:

python

進入 Python 的互動式模式(interactive mode)之後,就會看到三個大於符號(>>>),這就是 Python 的主要命令提示字元(primary prompt)。


SymPy:使用 Python 幫你導煩人的數學公式(二)

符號(Symbol)與代數運算

SymPy 與其他的 CAS(Computer Algebra System)不同,在 SymPy 中所有的變數都要經過宣告才能使用:

>>> from sympy import Symbol
>>> x = Symbol('x')
>>> y = Symbol('y')

第二行是將 Python 變數 x 指定為 SymPy Symbol。

在 sympy.abc 中有預先定義一些 Symbol(包涵一些以希臘字母命名的 Symbol)。

>>> from sympy.abc import x, theta

若要建立多個 Symbol 可以使用 symbols 與 var 兩個函數,兩個函數作用相同,都可以接受 range notation,但 var 會自動將建立的 Symbol 加入命名空間(namespace)。

>>> from sympy import symbols, var
>>> a, b, c = symbols('a,b,c')
>>> d, e, f = symbols('d:f')
>>> var('g:h')
(g, h)
>>> var('g:2')
(g0, g1)


SymPy:使用 Python 幫你導煩人的數學公式(三)

微積分(Calculus)

SymPy 也可以用於微積分的計算,這裡介紹在微積分中常用的運算。

SymPy 提供了ㄧ個 limit(function, variable, point) 函數可以計算函數的極限值。下面的這個指令可以計算 sin(x) 函數在 x 趨近於零的極限值。

>>> from sympy import limit, Symbol, sin, oo
>>> x = Symbol('x')
>>> limit(sin(x)/x, x, 0)
1


亦可計算無限大的極限值:

>>> limit(x, x, oo)
oo

>>> limit(1/x, x, oo)
0

>>> limit(x**x, x, 0)
1


SymPy:使用 Python 幫你導煩人的數學公式(四)

複數(Complex numbers)

SymPy 也可以處理複數,Symbol 亦可以指定屬性(attribute),例如:real、positive 或 complex 等,指定屬性會影響其運算的結果。

>>> from sympy import Symbol, exp, I
>>> x = Symbol("x") # a plain x with no attributes
>>> exp(I*x).expand()
 I*x
e
>>> exp(I*x).expand(complex=True)
   -im(x)               -im(x)
I*e      *sin(re(x)) + e      *cos(re(x))
>>> x = Symbol("x", real=True)
>>> exp(I*x).expand(complex=True)
I*sin(x) + cos(x)

SymPy:使用 Python 幫你導煩人的數學公式(五)

微分方程(Differential Equations)

>>> from sympy import Function, Symbol, dsolve
>>> f = Function('f')
>>> x = Symbol('x')
>>> f(x).diff(x, x) + f(x)
        2
       d
f(x) + ---(f(x))
         2
       dx

>>> dsolve(f(x).diff(x, x) + f(x), f(x))
f(x) = C1*sin(x) + C2*cos(x)