星期一, 4月 18, 2016

Celery Best Practice 筆記

邊看這篇 Celery - Best Practices 邊做的簡單摘錄與筆記。
  1. 不要用資料庫當作 AMQP Broker。Celery 會建立數個 process 去 poll 資料庫來檢查是否有新的工作,這會導致資料庫的 disk I/O 增加,也會增加對資料庫的連接數目。
  2. 使用更多佇列 (不要只用一個)。
    並不是所有的 task 執行時間、次數跟權重都一樣,例如不重要的 task A 可能會執行很多次,但比較重要的 task B 只有零星幾個。一個佇列會導致 Celery 依序執行佇列裡的工作,所以前面可能會排了很多 task A 工作,就多花了許多時間執行,反而重要的 task B 工作延後了。依照 task 分佇列擺放,可以避免這樣的情況。
  3. 使用權重。Celery 可以針對佇列設定權重與分流,可以使用專門的 worker 來服務指定的佇列,讓 task 得到更好的服務。
    
       CELERY_QUEUES = (
        Queue('default', Exchange('default'), routing_key='default'),
        Queue('for_task_A', Exchange('for_task_A'), routing_key='for_task_A'),
        Queue('for_task_B', Exchange('for_task_B'), routing_key='for_task_B'),
       )
       CELERY_ROUTES = {
        'my_taskA': {'queue': 'for_task_A', 'routing_key': 'for_task_A'},
        'my_taskB': {'queue': 'for_task_B', 'routing_key': 'for_task_B'},
       }
    
    
       celery worker -E -l INFO -n workerA -Q for_task_A
       celery worker -E -l INFO -n workerB -Q for_task_B
    
  4. 使用 Celery 的錯誤處理機制。task 可以指定這些參數 default_retry_delay=300, max_retries=5 來指定重試間隔與重試次數。task 裏面只要使用 try...except 跟 self.retry 就可以了。
    
       @app.task(bind=True, default_retry_delay=300, max_retries=5)
       def my_task_A():
         try:
           print("doing stuff here...")
         except SomeNetworkException as e:
           print("maybe do some clenup here....")
           self.retry(e)     # Retry!
    
  5. 使用 Flower。這是一個只要裝上就能使用的 Module,可以用來觀察 Task/Queue 的狀況。
  6. 只有在真的需要時,才保留執行結果。不需要的話,就加上 CELERY_IGNORE_RESULT = True,Celery 會自動丟棄結果。
  7. 不 要傳遞 ORM 物件給 task。這是因為 Celery 是用 serialization 方式來傳遞參數到別的 Process (Task 是在其他的 Process 上執行),預設可以使用 pickle, cPickle, JSON, YAML ,但是 serialization/deserialization 是有負擔的,而且不保證所有狀態都能保存,建議最好是 pure 的物件或是用整數、字串等比較不容易出狀況的型態。

星期四, 4月 14, 2016

電影流水帳(2016/3/21~2016/4/13)

zooey
Zooey Deschanel 這幾年比較沒演電影了,她讓我印象最深刻的兩部電影是 500 跟 Yes Man,那種古靈精怪,有點讓人難以捉摸的性格很令人著迷。
  • Pixels (IMDB, Wikipedia), 台譯:世界大對戰。1982 年,NASA 發射了膠囊到太空去,結果讓外星人以為是宣戰,於是派軍到地球來。美國總統看到外星人的入侵,判斷這絕對需要兒時愛打電玩的好友 Sam 幫忙,於是就找來跟美國陸軍的  Lieutenant 合作。一開始的合作並不順利,兩邊並不信任,還好經過兩三次的合作以後,漸入佳境,Sam 也找了其他兒時一起玩電玩的朋友來幫忙。在玩 PAC MAN 時,找來的好友 Eddie 以作弊方式贏了外星人,外星人認定地球人算輸,於是就無視之前講好的規則,開始大肆破壞,並擄走  Lieutenant 的兒子。美國陸軍也認定 Sam 他們幫不了忙了,就改用自己的方式進行抵禦。
    Sam 與伙伴們則不放棄,決定直搗黃龍,進入外星人的要塞,結果遇到 Sam 兒時的心理障礙遊戲 - 大金剛,花了九牛二虎之力,Sam 克服了兒時的障礙,闖關成功,不但救出  Lieutenant 的兒子,也與外星人講清楚,化解了誤會。最後,外星人離開,Sam 與伙伴們也都心想事成。
    整體來說,沒特別好看,但也不會特別難看,普普通通。
  • Jack Reacher (IMDB, Wikipedia),台譯: 神隱任務。還蠻精彩、懸疑的電影,不過 Reacher 有點太神了。
    有人冒充 Barr 殺了人,Barr 被逮了以後,沒說什麼,只說想見 Jack Reacher。Reacher 看到新聞以後,自己上門找 FBI,在跟辯護律師 Helen 聊過以後,發現整件事情有點奇怪,於是跟 Helen 一起展開調查。在逐步的調查以後,兩人發現 Barr 是被冤枉的,事情沒想像中那麼簡單。整件事情其實是要爭奪公司經營權,但是殺手為了偽裝成隨機殺人,所以順便殺了附近的幾個人,並故意留下線索,讓人找到 Barr。最後 Reacher 智勇雙全的找到兇手,本來打算要讓法律制裁的,但是主謀的幾句話,讓 Reacher 改變了念頭,自己開槍制裁了這些人。
  • 破風 (IMDB, Wikipedia)。原本有點期待這部電影的,看了之後有一點點小失望,騎乘腳踏車的部份很有真實感,很熱血,但是在故事的發展上有點弱。
    本來在同一車隊的伙伴,仇銘、鄭知元、邱田,因為車隊失去金援,就各自到別的車隊去發展。仇銘發展的不錯,也跟詩瑤談了戀愛,可是對於求勝過於執著,忘記 了要跟隊友與詩瑤好好相處。邱田執著於當衝線王,但受限於體能,始終無法突破,後來流落到韓國去。詩瑤在跟仇銘分了以後,被邱田熱烈的追求過一陣子,但不 幸發生意外,小腿受到影響。仇銘為了愛,捐出自己的肌腱,讓詩瑤恢復。鄭知元應該是發展的最好的,一直被仇銘追趕,後來感念以前教練的幫忙,甚至幫忙找到 資助,重新成立車隊。
    新的車隊找回仇銘跟邱田,在國際比賽上與鄭知元的隊伍展開競爭,最後的比賽,仇銘跟邱田打敗了鄭知元,但三人沒有反目成仇,反而更加惺惺相惜。
  • 財神客棧 (IMDB, Wikipedia)。故事有點弱弱的,剛好看到,就打發時間。
    兩個實習捕快龔少爺和老巴,功夫不錯,也有不錯的推理頭腦。城裡的白玉觀音不見了,兩人一起做了調查。後來,朝廷的鐵無情來做正式的調查了,兩人鉅細靡遺 地將調查報告轉告給鐵無情,但卻被鐵無情否決,並且透露一些口風,讓人逮捕他們兩人。(其實從這邊就可以猜到鐵無情是幕後主謀了)
    兩人在獄裡認識了火龍女跟水龍女,並透過二人幫忙,逃出監獄。於是四人一起展開調查真兇的冒險,在路上又遇到聞問切,就變成五個人一起到財神客棧去。在財神客棧裡一番短兵相接(打打鬧鬧),終於發現鐵無情就是主謀,於是展開一場大混戰,最後當然是喜劇收場。
  • Yes Man (IMDB, Wikipedia),台譯:沒問題先生。我覺得很勵志的一部電影,查了維基百科才知道,這電影是改編自小說,Jim Carrey 再次選到好劇本。
    Carl 是個不想跟外界生活有所牽扯的一個人,在意外被拉去參加演講以後,答應主講人 Terrence 要對每件事情說 Yes,說 No 的話就會倒大楣。結果說 Yes 這件事情徹底改變了 Carl 的生活,他開始願意幫助朋友,參加朋友的聚會,積極的上課。他發現他的生活變得愈來愈好,而且還認識了真命天女 Allison。
    在一切看似很順利的時候,Carl 跟 Allison 到機場打算再次展開意外的旅行,卻被 FBI 逮捕,還好當律師的朋友幫忙,兩人才脫困。可是這次讓 Allison 知道 Carl 是因為 Yes 而說 Yes,Allison 糊塗了,她搞不清楚 Carl 是真的說 Yes 還是假的說 Yes,就很生氣的分了。Carl 開始思考到底說 Yes 是對的還是錯的,他開始有點鑽牛角尖了。
    後來 Carl 找到 Terrence ,詢問他關於每件事都說 Yes 是對還是不對,透過 Terrence 的說明,Carl 明白了 Yes 或 No 並不是那麼重要,而是面對外界事物的心態上要有所改變。於是他衝去找 Allison ,講清楚整件事情,兩人復合,快樂的大結局。

星期二, 3月 29, 2016

電影流水帳(2016/3/6~2016/3/20)

本來想放 Anna Camp 照片的,但是都沒能找到合適的,算了,還是放瑟曦(Cersei)皇后 Lena Headey 的照片好了! Lena Headey 最有名的角色就是 300 壯士的皇后跟冰與火之歌裡的瑟曦皇后,脫俗的氣質根本是飾演皇后的不二人選。在維基百科上有看到她還有演過「終結者外傳」裡的莎拉康納,有機會應該找這部 影集來看看~
Lena Headey Game of Thrones
  • Pitch Perfect 2 (IMDB, Wikipedia),台譯:歌喉讚2。之前只看過第一集一部份,正好 HBO 播出了,就硬著頭皮看完,所以無從跟第一集比較起。坦白說,沒有想像中那麼好看,不過最後前團員一起大合唱那段,看到 Aubrey 等人時是相當感動的。
    故事就是美麗女聲合唱團搞砸了巡演,被禁止巡迴演出,為了名譽,她們必須贏得世界大賽。這次有新人加入,有人留戀、有人開始工作、有人找到真愛等等,最後 是團結起來參加集訓,重新找到自我的定位,並且找來所有美麗女聲的前團員一起大合唱,打敗了德國的合唱團體,贏得世界大賽。
    從第一集到這一集,我一直覺得 Anna Camp 演的 Aubrey 蠻搶眼的,個性很立體。第二集時,她畢業後跑去開了一個 boot camp,說因為在美麗女聲才發現自己很適合這種激勵、培訓人的工作,還蠻妙的。
  • The Good Dinosaur (IMDB, Wikipedia),台譯:恐龍當家。我覺得故事把恐龍設定為智能較高的生物,而人則是相對發展較低的生物,這種反差有點讓人不能接受。
    Arlo 是一隻體弱、膽怯的恐龍,一次追趕人類 Spot 的意外,Arlo 的父親喪生,這讓 Arlo 很自責。後來 Arlo 再次看到 Spot 時,決定為自己的父親給 Spot 一個教訓,就追著 Spot ,結果兩個都掉到河裡,意外漂流到很遠的地方。
    兩個上岸以後,Arlo 只能暫時與 Spot 結伴同行,在同行的過程裡,Arlo 發現 Spot 並不是想像中那麼的壞,在回家的旅程中,經歷了許多事情,成為了好朋友。就在快到家的時候,途中遇到的翼手龍在終點襲擊他們,Arlo 為了救 Spot ,鼓起勇氣對抗翼手龍,完成了父親的期許。最後兩個平安脫困,Spot 與家人團聚,而 Arlo 也回到家與家人團聚,一個快樂的結局。
  • 港囧 (IMDB, Wikipedia)。我覺得這部電影還不錯,有笑有淚,跟前面的兩部作品相比,成就更高了些。除了有許多香港演員、導演演出之外,更精彩的是電影的配樂,配樂採用的都是之前知名港片裡的配樂,跟當下的劇情非常的搭,讓人很有共鳴。
    徐來是個藝術學院的學生,在學校裡與楊伊是情侶,每次要接吻時,總是有意外發生。蔡菠一樣也是藝術學院的學生,她暗戀著徐來。後來楊伊爭取到香港留學的機會,就拋下徐來了,蔡菠趁機而入,爭取到徐來,徐來與蔡菠結婚之後,加入蔡菠家族的胸罩公司,開始設計胸罩。
    時間就這樣一下過了二十年,徐來收到楊伊的邀請,決定趁著一家人去香港的機會,偷偷與楊伊見面,圓 20 年前的夢。結果與蔡菠弟弟-蔡拉拉一起踏上莫名其妙的旅程,經歷許多狗屁倒灶的事情。最後,徐來確定自己是愛著蔡菠的,也順利的讓蔡菠懷孕,而蔡拉拉拍攝 下來的整趟旅程則意外得到電影獎項。
  • 300 (IMDB, Wikipedia),台譯:300 壯士。在 Netflix 上看完的,2006 年的電影,到現在總算是看過了。
    故事蠻簡單的,波斯王 Xerxes 率領大軍進逼希臘,先派了使者去斯巴達,卻遭到斯巴達國王 Leonidas 的拒絕。議會跟先知早已經被波斯收買,不同意出兵,所以 Leonidas 藉著出去巡邏的名義帶了三百壯士到溫泉關要背水一戰。在路上遇到 Ephialtes ,但 Leonidas 拒絕他加入軍隊,只要他去把守繞到溫泉關後面的小徑, Ephialtes 非常忿怒,覺得被看不起。
    波斯軍與斯巴達軍開始交峰,基本上斯巴達軍是百戰百勝。直到 Ephialtes 加入波斯軍,帶著波斯軍繞到溫泉關後面,這時斯巴達軍前後受敵,只能拼死一搏。這時,皇后在國內也試圖說服議會,讓議會派軍去援助自己的丈夫。本來已經跟 議會最大勢力首領 Theron 講好要支持出兵的,Theron 卻反口,並誣指皇后偷人。皇后不甘受辱,持刀戳了 Theron ,這一刀戳出了 Xerxes 的金幣,這下子鐵證如山,Theron 早已遭到波斯人收買,於是議會順利通過出兵案。但這時候已經來不及了,300 壯士都已經戰死。
    最後就是斯巴達人率領著希臘聯軍大戰波斯軍這樣。

星期四, 3月 17, 2016

電影流水帳(2016/2/22~2016/3/05)

isla_fisher_01Isla Lang Fisher ,在 Now you see me 裡飾演美麗的魔術師,在看維基百科條目時,才發現到她比我小一歲耶~ 她演過蠻多電影的,只是都沒那麼讓人印象深刻,我比較有印象的大概就 Now you see me 跟購物狂的異想世界。話說,購物狂的異想世界其實我還沒看過...
  • Now You See Me (IMDB, Wikipedia),台譯:出神入化。總算是找了一個時間完整的看過了,之前都是前面看一點、後面看一點這樣。
    四個魔術師接受了神祕的邀請,在一年之後,自稱是四騎士,變得非常的出名。一次大型魔術表演了竊取法國銀行的錢,引起 FBI 跟法國刑警的注意,於是 FBI 與法國刑警協同展開調查。扣了人起來以後,卻一無所獲,只好放人。值此同時,另外一個專門揭穿魔術手法的魔術師,也開始積極展開行動。
    然後四騎士進行第二次的魔術表演,這次的魔術表演也非常的成功,但這次的表演把資助他們表演的銀行家 Arthur 搞得失去了一大筆錢。FBI 與法國刑警雖然全程的盯哨,仍然沒能逮到四騎士是怎麼犯案的。然後有點不太記得是怎麼跟到四騎士的藏身處了,總之,在被 FBI 的 Dylan 與國際刑警的 Alma 追捕的時候,四騎士裡的 Jack 因為車子撞到護欄爆炸而死了。
    最後,FBI 與國際刑警設法找到了被盜的錢,但卻發現被耍了。剩下的三個騎士,仍然進行了最後一場表演。FBI 與國際刑警轉而去追這三個騎士,後來卻沒追到,反而發現專門揭發魔術手法的魔術師 Thaddeus 車子裡有贓款,於是將他拘捕。
    在夜深人靜的公園裡,真相大白,原來幕後的主使者就是 Dylan ,他的父親因為 Arthur 、保險箱製造商與 Thaddeus 的關係而死,這次的行動主要是為了復仇。四騎士玩的很開心,也很驚訝主使者是他。後來 Dylan 跑到法國去找 Alma ,坦白一切,不過 Alma 沒說些什麼。
  • Zootopia (IMDB, Wikipedia),台譯:動物方程市。很不錯的故事,也很有趣,兩個小鬼都覺得不錯。
    Judy 是個熱血的兔子,她覺得只要有心去做,就能成功,於是她當了警察,被調到城市裡去當差。事實跟理想難免會有差距,警察局長總是叫 Judy 去開交通罰單,而不叫 Judy 跟其他警員一同去調查十四個哺乳動物失蹤的案件。在開單的過程裡,Judy 認識了 Nick 這個狡猾的狐狸。
    上班後的某天,Judy 遇到了哭哭啼啼的水獺太太來警察局,水獺太太的先生不見了,Judy 安慰她,並且把調查的工作攬到身上。局長超不爽,本來要 Judy 去跟水獺太太說抱歉,可是副市長剛好來了,就礙於長官,改成必須在兩天內破案。Judy 很開心,根據線索,他發現了 Nick 就在水獺先生失蹤的現場,就找了 Nick ,要脅他幫忙辦案。
    兩人就開始查案了,在查案的過程裡,慢慢交心,也找到了那十四個失蹤的動物。這些失蹤而且發狂的肉食動物竟然是被市長給藏了起來,於是市長被捕,Judy 成了英雄。警察局開了記者會,宣佈找到失蹤動物的消息,可是,Judy 在接受記者訪問的時候,說錯了話,戳到 Nick 的痛處,讓 Nick 很生氣的離開。這次記者會之後,整個城市裡的動物們都人人自危,懷疑旁邊的肉食動物會突然發狂吃掉自己。 Judy 在這種氣氛下,覺得都是自己害的,就決定告老還鄉。
    在老家的攤子顧攤與幼時同學閒聊的時候,赫然發現了肉食動物發狂的原因,於是匆匆忙忙的趕回去城市裡。先找 Nick 道歉以後,一起進行調查,這次真的找到幕後主使者了,可是也被發現。壞人就追著 Nick 與 Judy 跑,Nick 與 Judy 也一直逃,就在看似無路可走的情況下,Judy 跟 Nick 設下圈套,套了副市長的話,這下子,副市長也不得不認罪了。
    故事的結局,Nick 加入了警局,跟 Judy 組成搭檔,而且也知道了為什麼快俠被叫作快俠的原因。

星期五, 3月 04, 2016

jenkins 的 gitlab-merge-request-builder-plugin

gitlab-merge-request-builder 是可以讓 jenkins 對 gitlab 送 merge request 的 plugin,但是這個 plugin 不在 jenkins plugins repositories,所以找不到,得自己 build。
首先要裝 maven:sudo apt-get install maven
  1. 先到 java-gitlab-api ,取得原始碼,接著用 mvn install 來安裝,maven 會把生成的 gitlab api wrapper 安裝到 $HOME/.m2 下。
  2. jenkins-gitlab-merge-request-builder-plugin 取得 plugin 的原始碼,取得以後,修改 pom.xml ,把 java-gitlab-api 的版本改為 1.2.5-SNAPSHOT ,然後執行 mvn hpi:hpi 。
  3. 大功告成,建置好的 plugin 會在 target/ 下。
plugin 的說明裡提到,如果 gitlab 在 8.1.x 以下,要使用 v1.2.4 ;gitlab 在 8.1.x 以上 (含),可以直接用最新版本。關於這點,我倒是還沒去試,總之先把建置的步驟紀錄下來。
P.S. 我發現有兩個來源耶,所以?!
  1. https://github.com/timols/jenkins-gitlab-merge-request-builder-plugin
  2. https://github.com/jenkinsci/gitlab-merge-request-builder-plugin

您或許對這些文章有興趣

Related Posts Plugin for WordPress, Blogger...