八月份 Taipei.py 聚會

Friday, August 30, 2013 » taipei.py, Authored by Lucemia

Python Development Sprint Invitation by Tim

  • PyCon要辦Sprint了,想知道Srpint是什麼嗎?!一起寫Code!
  • 徵求專案,歡迎已經有一定規模的專案投稿link

主題演講: CPython 原始碼解析 by 果凍

投影片:
https://docs.google.com/presentation/d/15rjPknI-5zxH78NbWbu1XSipkJZrw90jKfbN1jtOAho/pub?start=false&loop=false&delayms=3000#slide=id.p

這次我要演講的主題是 CPython 如何執行 python code,焦點主要是放在 vm 部分。目前暫無考慮編譯部分。因為是講較底層的東西,因此整個演講會有不少有關 C 語言的東西。另外,也會示範如何利用 gdb 來 了解 python 運作。示範環境在 ubuntu 下。

演講大綱:

  • code object 與 frame object 簡介
  • cpython op code 簡介
  • 示範如何利用 gdb 來幫助我們了解 python 執行
  • cpython 如何執行 op code

果凍示範了如何使用dis module 取得 python 程式碼的 opcode. 可以更容易瞭解Python 底層的實作.

聽了拿來試幾個例子:

  1. stackoverflow 上看過(What is the preferred syntax for initializing a dict?)有人討論x = dict()x = {} 會有效能差異, 立馬來測一下

It works for all kinds of keys, so you can, for example, say {1: 'one', 2: 'two'}. The second variant only works for (some) string keys. Using different kinds of syntax depending on the type of the keys would be an unnecessary inconsistency.
It is faster:

測試結果

1
2
3
4
$ python -m timeit "dict(a='value', another='value')"
1000000 loops, best of 3: 0.79 usec per loop
$ python -m timeit "{'a': 'value','another': 'value'}"
1000000 loops, best of 3: 0.305 usec per loop

x=dict()會比x={}慢上兩倍, 實際用 dis 解析:

1
2
3
4
5
6
7
import dis

def x1():
    x = dict()

def x2():
    x = {}
dis.dis(x1)
>>> dis.dis(x1)
  2           0 LOAD_GLOBAL              0 (dict)
              3 CALL_FUNCTION            0
              6 STORE_FAST               0 (x)
              9 LOAD_CONST               0 (None)
             12 RETURN_VALUE

dis.dis(x2)
>>> dis.dis(x2)
  2           0 BUILD_MAP                0
              3 STORE_FAST               0 (x)
              6 LOAD_CONST               0 (None)
              9 RETURN_VALUE

可以看得出來很明顯的 x = dict() 多執行了一行 CALL_FUNCTION.可以瞭解額外的執行負擔的來源.雖然不能直接從op code的長短推斷執行效率,但對於在寫code時選擇有一些參考的工具.

Lightening Talk 1 - 使用Blender和簡易的Python Script模擬出如同電影裡的GUI介面動畫_^ by DC

請到果凍的學弟, 一名大一新生! 來introduce Blender, 國中!時受到WANTED 的啓發開始做了第一個Blender動畫. 介紹了很多學生時代使用Blender做出來的影片, 作品集看起來效果很驚人! 以後學生就有能力做很好的3D動畫了!!

About Blender:

  • Open source
  • Cross Platform
  • GPU-accelerated
  • Python Scripting Support
  • Official Open-Movie Projects

Use python Script in Blender:

可以透過Python Script來做一些Blender裡面不支援的動畫效果. 或是減少很多重複的工作(如focus, defocus的效果). 以及作分鏡.

完成的的影片 All or Nothing

Lightening Talk 2 - Taipei.py Logo 的故事 by Joe

不辭風雨從台南上來的Joe, 帶給大家 Taipei.py Logo的故事. 劇情曲折, 十分精彩, 內容不輸"少年Py的奇幻漂流,有機會一定要親耳聽聽看.

Lightening Talk 3 - mynt by David

如何使用 Mynt 做出Taiwan.py的網站 link

Taipei.py 以後會用MyNt做會後報導
- 很好寫, 聽完Taipei.py 的活動就寫完了 (比什麼Log什麼Down還好寫!)
- 大家加入一起寫! (聽眾心得, 講者補充… etc)
- what is mynt
- how to use mynt
- usage (mynt watch, mynt serve)
- markdown, yaml
- Template (jinja2)
- how to create taiwan.py

Taiwan.py

PyCon 2014 PR 組徵人

  • 參加活動, 宣傳Python
  • 維護 taiwan.py Website
  • 跑腿, 想idea (做名片) (Joe 要不要再投稿一次?)

Lightening Talk 4 - NextBio Python Open Source by 亮亮

  • Bio有超多 BIG DATA
  • BIO Python的問題
    • 缺Doc
    • 光FILE I/O就很困難
    • 很慢
    • 使用一些新的 Module (numpy, panda, PySAM)
  • 目標提供 Uniform Interface for Basic Bio Object
  • 參加Sprint, 歡迎大家

Lightening Talk 5 - Whois Call 徵人

  • 徵 Web 主管 (一人)

謝謝講者們的精彩演講!! 這次有五場Lightening Talk實在太充實啦, 讓我們期待九月份的活動:

Fork me on GitHub