#100DaysOfPyCon2018 Day2: There and Back Again: Disable and re-enable garbage collector at Instagram

Key takeaways — Garbage collector (GC) จะทำงานอยู่บนหลักการสองอย่างคือ Reference count กับ Copy-On-Write Semantic - Instagram disable GC ช่วยลด memory ได้จาก 500mb / process เหลือ 350mb / process (ลองคิดภาพ uWSGI ลดได้ขนาดนั้นแล้วรันซัก 100 กว่า process) - ใช้ perf ในการทำ profiling memory usage - Disable โดยใช้คำสั่ง gc.disable() ไม่เกิดอะไรขึ้น แต่ใช้ gc.set_threshold(0) ปิดได้จริงแต่สิ่งที่เกิดขึ้นคือ Instagram down เพราะ OOM ต้องแก้โดย hack atexit.register(os._exit, 0) แต่ปัจจุบันไม่ต้องแก้แล้วเพราะ hack นี้รวมไปใน Python 3.6 แล้ว - หลังจากปิด GC ไป Memory utilize ลดลง 15% มี shared memory เพิ่มขึ้น 100mb และ instruction / cycle เพิ่มขึ้น 10% ...

May 16, 2018 · 2 min

Python Type Annotation: ทำไม Python ต้องเขียน Type ด้วย

ตั้งแต่ Python 3.5 เป็นต้นมา Python ได้แปลงร่างจากภาษา Duck Typing เต็มตัว ให้มีความสามารถในการใส่ Type Annotation ในโค้ดซึ่งถูกพัฒนามาตั้งแต่ปี 2014 แต่ผมค้นพบว่าหลายๆ บริษัทการเขียน Type Annotation ในภาษา Python ยังไม่แพร่หลายอย่างที่มันควร ในบล็อคนี่เลยจะพาไปรู้จักตั้งแต่เหตุผลที่ว่าทำไมเราถึงควรใส่ Type Annotation จะใช้ Type Annotation ยังไง รวมถึงกลยุทธในการเพิ่ม Type Annotation เข้าไปใน Codebase และ workflow ของเราครับ ทำไมถึงต้องมี Type Annotation เป็นคำถามแรกเลยและคำถามสำคัญด้วย ทำไมเราถึงควรจะใส่ Type Annotation ให้กับภาษาที่เป็น Duck typing อย่าง Python ทำไมเราถึงอยากจะลดอิสระภาพในการประกาศอะไรก็ได้ ลองดูโค้ดตัวอย่างข้างล่างนี้ครับ ดูแว็บแรกก็เหมือนจะเข้าใจง่ายใช่มั้ยครับ เป็นฟังก์ชั่นไว้ยิง request รับ url, data, headers พอผ่านไปซักหกเดือนมันเกิดคำถาม data มันรับข้อมูลแบบไหน ? มันอาจจะเป็น text ก็ได้ อาจจะเป็น dict ก็ได้ เราไม่มีทางรู้ได้เลยแต่แรกจากโค้ดว่าควรจะส่ง data หน้าตาเป็นยังไง ทีนี้เราลองมาดูฟังก์ชั่นเดียวกันที่ใส่ Type Annotation แล้วนะครับ (อย่าเพิ่งสนใจ Syntax มากนะครับ พยายามดูแบบไม่ต้องคิดอะไรมากก่อน) ...

January 3, 2018 · 5 min

10 Python libraries ที่เราชอบในปี 2017

ช่วงท้ายปีเป็นช่วงที่คนส่วนใหญ่จะนั่งนึกถึงว่าเราทำอะไรมาบ้าง ตลอดปีที่ผ่านมา แล้วจะทำอะไรต่อไปในปีข้างหน้า ปกติแล้วทุกปีช่วงท้ายๆ ปีผมจะชอบรอ Tech Radar ออกซึ่งก็จะได้รู้จัก Tools และ Techniques ใหม่ๆ ที่ Proof แล้วว่า Work เลยคิดว่า คงจะดีไม่น้อยที่เราจะได้แบ่งปันอะไรบ้าง ในมุมมองของการทำงานที่ Pronto Tools นี้ \1. pipenv 🗄 Source: https://docs.pipenv.org/ ปีนี้ถ้าจะไม่พูดถึง pipenv ก็คงจะไม่ได้ เพราะ library ตัวนี้ได้เปลี่ยน workflow ในการ develop python ไปอย่างสิ้นเชิง พร้อมกับความสามารถใหม่ๆ ที่เพิ่มเข้ามาจน Python.org ให้การรับรองว่าเป็น packaging tool ที่ควรจะใช้แทน pip ที่ใช้กันมาหลายปี จุดเด่นหลักๆ ของ pipenv คือการเพิ่ม Pipfile มาแทนที่ requirements.txt ที่เป็น pattern พื้นฐานกันมาหลายปี ด้วย syntax แบบ TOML ที่ง่ายกว่ามาก และมีความสามารถมากกว่าเช่น สามารถกำหนด version ของ Python ที่ต้องการจะใช้ run ได้, สามารถกำหนด development package ได้ ทำให้เราไม่ต้องแยก file requirements.txt สำหรับแต่ละ environment อีกต่อไป นอกจากนั้นแล้ว pipenv ยัง เพิ่ม Pipfile.lock มาด้วย​ซึ่งทำให้เรามั่นใจได้ว่าจะได้ Package ที่ถูกต้องจริงๆ จาก PyPI ...

December 27, 2017 · 3 min