Python 的 GIL (Global Interpreter Lock)

前幾個月在做專案的時候,發現用 mod_wsgi + web.py 寫的程式,理論上支援 multi-thread,應該可以完全利用在多核 CPU Server 的優勢;但實際上跑的時候,會有沒辦法把 CPU Resource 吃完的問題。當時因為時間很趕,想到的解法就是多跑幾個 Process:

<VirtualHost *:80> 
   DocumentRoot “/srv/web/webroot" 
   ServerName python.example.com 
   WSGIProcessGroup pythonexample 
   WSGIDaemonProcess pythonexample processes=16 threads=128 maximum-requests=1024 display-name=%{GROUP}
</VirtualHost>

COSCUPlwhsu 聊到這件事,他講到 CPython 的 GIL,回來查了一下果然就是這個原因。剛好 Web 不需要在每個 thread 之間互相傳資料,所以可以直接用多個 Process 解掉這個問題。

雖然 Python 在執行前就把程式碼轉成 byte code了,但因為這個 Lock 是實做在 CPython 的 Bytecode Interpreter 裡面,所以導致了同時只會有一個 thread 執行 Python bytecode,也因此無法利用到多核 CPU 的優勢1

除了多跑幾個 Process 之外,也可以用 ctypes 配合用 C 寫的 library 來解決這個問題,不過以 Web 應用來說,寫 C 的機會不高就是了。

  1. Stackoverflow: Python threading and gil []

Plurk 的 OAuth API…

聲明:我目前是 PIXNET 的員工。PIXNET 提供 OAuth API 服務給 PIXNET 本體與 Murmur.tw

Plurk 最近推出了新的 OAuth Core 1.0a API,終於是不用存帳號密碼了……今天晚上試著寫了一個機器人:台灣漫畫出版情報

現在的主要語言都有提供 OAuth Core 1.0a 的 Library,不過因為某些因素(其實就是懶……),我用的是 ronnywang 寫的 phppixnetapi 來改。其實也只要改掉前面定義的三個 URL,然後各個 function 照著 Plurk 提供的API寫就可以了。

寫完,測試發噗不會動……不過取得 Timeline 倒是成功了。檢查了老半天看不出什麼原因,最後把 POST 改成 GET 就可以了……OTL 真是令人絕望。

另外測試發噗的時候一如往常的遇到 Plurk 的防洪機制XD

Amazon Web Services 解釋這次掛掉的原因…

Amazon Web Services 今天在網站上公佈了 4/21 EBS 故障的原因。雖然一開始的人為操作失誤很快就回覆(roll-back)了,不過後面造成的骨牌效應還是讓整個系統掛了(不穩定)了三天……

文章裡面有一些設計系統的時候的重點:

  • 多次失敗重試的時候要把重試的間隔拉長(back off aggressively)。
  • 想辦法在要救資料的時候可以(半)自動化。
  • 限制失敗重試的次數,如果超過的話就暫時從整個系統中隔離。

另外 AWS 也提出了這次事件的賠償方式:

For customers with an attached EBS volume or a running RDS database instance in the affected Availability Zone in the US East Region at the time of the disruption, regardless of whether their resources and application were impacted or not, we are going to provide a 10 day credit equal to 100% of their usage of EBS Volumes, EC2 Instances and RDS database instances that were running in the affected Availability Zone. These customers will not have to do anything in order to receive this credit, as it will be automatically applied to their next AWS bill. Customers can see whether they qualify for the service credit by logging into their AWS Account Activity page.

簡譯如下:不論客戶是否受到影響,只要發生問題的當時在美東地區有使用 EBS 或是 RDS,AWS會賠償 10 個整天客戶所使用的資源,以 credit 的方式(未來可以抵)給客戶。

詳細的賠償額度可以看四月份的帳單。另外這次的賠償是不用另外申請的(EC2的SLA規定低於Service Level時要另外寫信去申請才能獲得賠償)

AWS Route53 的 CLI 管理工具:Net::Amazon::Route53

在找其他資料時意外發現的:Net::Amazon::Route53。Route53 的簡介可以看之前的文章:AWS 推出 Anycast DNS 服務:Amazon Route 53

比起 Amazon 提供的陽春工具好多了,加減一個Record不用寫XML寫到死……

列出 Zone 的 Records:

jnlin@Florence [1:57am] ~> route53 -keyname my-aws-account record list jnlin.org.
jnlin.org. A 3600 69.10.61.218
jnlin.org. NS 172800 ns-225.awsdns-28.com. ns-1456.awsdns-54.org. ns-804.awsdns-36.net. ns-1569.awsdns-04.co.uk.
jnlin.org. SOA 900 ns-225.awsdns-28.com. awsdns-hostmaster.amazon.com. 1 7200 900 1209600 86400
test.jnlin.org. A 3600 127.0.0.1

刪掉一個 Record:

jnlin@Florence [1:59am] ~> route53 -keyname my-aws-account record delete jnlin.org. –name test.jnlin.org.
Record deleted

新增一個 Record:

jnlin@Florence [2:07am] ~> route53 -keyname my-aws-account record create jnlin.org. –name localhost.jnlin.org. –type A –ttl 86400 –value 127.0.0.1
Record created

App Inventor 試玩心得

前幾日終於拿到之前申請的Android App Inventor邀請了,稍微玩了一下:

appinventor-2.png

介面像Visual Studio一樣,元件是用拖拉的。

appinventor-1.png

不過觸發的事件也是拖拉的,就如上面的方塊一樣。有種在組樂高積木的感覺XD

元件還不多,一個可以連網路的元件叫做 TinyWebDB,是一個Key-Value based 的 Network Storage Database。官方有API,除了可以用App Engine上的版本外,也可以自己寫一個。

另一個可以連網路的元件叫做Twitter…XD

此外一些基礎元件,像是WebView、OAuth或是RSS Feed都還欠缺,不過寫簡單的透過網路查(公開)資料的程式應該沒問題就是了…

第一個 CPAN Module

CPAN 是 Perl 很重要的資源之一,其中 Perl Modules 更是重點中的重點。之前想要把自己寫的一些 Module 傳上去,不過看到說明中的 “Please allow three weeks for proceeding” 就完全提不起勁了……

後來想說乾脆註冊起來放。沒想到才送出註冊請求兩小時,帳號就開好了……而且還是台灣時間晚上六點這種美國還是清晨六點的時間耶!

所以說,就把一些 SMS::TW::Drivers 放上去了。另外當然也順手做了 FreeBSD Ports,也方便自己使用。

將大量文字檔由 Big5-UAO 轉檔成 UTF-8

軟體名稱:
將大量文字檔由 Big5-UAO 轉檔成 UTF-8

下載連結:
http://www.cs.nctu.edu.tw/~jnlin/converter005.zip

軟體版本:
v0.005 – 加入防呆功能,沒有全部解壓縮不可以使用
MD5 (converter005.zip) = 7ff0def9218c24a1a870b4d1b15ef018

軟體分類:
轉檔軟體

執行平台:
Windows XP

語言介面:
英文

軟體特色:
不需要裝 UAO 就可以把內含 big5-UAO 字元的文字文件轉成 UTF-8
支援到子目錄搜尋
只能轉純文字文件 (*.txt, *.htm …)

誰適合用:
* 不喜歡UAO的人
* 有很多big5-UAO純文字文件的人

誰不適合用:
* 不喜歡文字介面的人
* 沒有big5-UAO純文字文件的人
* 裝有UAO的人 (可以用ConvertZ轉,介面比較親切)

附註:
解壓縮後(一定要解壓縮,絕對不要直接執行!)
將你要轉的文件複製到 BIG5 資料夾
(非純文字文件不能複製進去)
接著執行 convert.cmd 即可
轉好的檔案會放在 UTF8 資料夾

本軟體使用支援 UAO 的 iconv 由Tiberius提供,可於
http://mail.cs.nchu.edu.tw/~s9256043/libiconv-win32-uao-051122.zip
下載編譯好的 binary
可於
http://mail.cs.nchu.edu.tw/~s9256043/libiconv-win32-uao-051122-src.zip
下載原始碼