
Python 3.15 Tachyon: โปรไฟล์แบบสุ่มตัวอย่างโดยไม่ฝังโค้ดในโปรเซส
เวลาเซิร์ฟเวอร์ช้าในโปรดักชัน การใส่ profiler แบบตามทุกฟังก์ชันมักทำให้ช้ากว่าเดิม Tachyon เลยน่าสนใจ
เอกสาร profiling.sampling ใน Python 3.15 เรียกโปรไฟเลอร์นี้ว่า Tachyon มันอ่าน call stack เป็นระยะจากภายนอก ไม่ต้องแก้โค้ดและไม่ต้องรีสตาร์ทโปรเซส โอเวอร์เฮดบนเป้าเกือบศูนย์ตามเอกสาร
Statistical profiling คือการถ่ายภาพสแต็กเป็นระยะ แล้วประมาณว่าฟังก์ชันไหนกินเวลามากจากความถี่ที่โผล่ในตัวอย่าง ไม่ใช่จับเวลาทุกครั้งแบบ tracing
คำสั่งตัวอย่างจากเอกสาร (รันบนเครื่องที่มี Python 3.15)
python -m profiling.sampling run script.py
python -m profiling.sampling attach 12345
python -m profiling.sampling run --flamegraph -o profile.html script.py
รองรับ heatmap, gecko สำหรับ Firefox Profiler, โหมด live, และโหมด wall/cpu/gil/exception ตามออปชันในเอกสาร
ข้อจำกัดที่ต้องจำ
- โปรไฟเลอร์กับโปรเซสเป้าต้องเป็น Python minor version เดียวกัน เช่น ทั้งคู่เป็น 3.15
- บิลด์ free-threaded กับบิลด์มาตรฐานแนบข้ามกันไม่ได้
- บน Linux/macOS/Windows อาจต้องสิทธิ์อ่านหน่วยความจำของโปรเซสอื่น
รุ่น 3.15 ยังอยู่ในช่วง candidate ตาม หน้าปล่อย Python ใช้ทดลองได้ แต่ยังไม่ใช่คำแนะนำสำหรับโปรดักชันจนกว่า final จะออก
Recap
- อ่าน docs ของ
profiling.samplingก่อนลองบนเครื่องตัวเอง - เริ่มด้วย
runบนสคริปต์สั้น แล้วค่อยattachกับ PID - จับคู่เวอร์ชัน Python ให้ตรงกัน
- ใช้ flame graph หา hotspot ไม่ใช่เดาจากความรู้สึก