Hudson River Trading ( HRT ) telah berhasil menerapkan fork Python khusus di seluruh organisasi mereka, mengimplementasikan lazy import untuk secara dramatis mengurangi waktu startup aplikasi Python mereka. Tim engineering perusahaan trading ini menghabiskan lebih dari dua tahun untuk mengembangkan dan bermigrasi ke solusi ini, yang menunda pemuatan modul hingga benar-benar dibutuhkan saat runtime.
Masalah yang Memicu Inovasi
Arsitektur monorepo HRT , meskipun memungkinkan kolaborasi antar tim, menciptakan bottleneck performa yang signifikan. Script Python mereka mengimpor sejumlah besar modul saat startup, dengan banyak import yang tidak pernah benar-benar digunakan selama eksekusi. Hal ini mengakibatkan command-line tools membutuhkan puluhan detik untuk start, notebook Jupyter memerlukan waktu menit untuk load, dan distributed computing jobs menghabiskan lebih banyak waktu untuk import daripada komputasi sebenarnya. Masalah ini sangat akut karena modul-modul mereka sering berada di distributed file systems dan mengandung kode inisialisasi yang berat.
Diskusi komunitas mengungkapkan bahwa ini bukan masalah unik HRT . Banyak developer berjuang dengan overhead import Python, terutama di codebase yang besar. Beberapa menggunakan workaround manual seperti menempatkan import di dalam fungsi atau menggunakan library lazy import yang sudah ada, tetapi pendekatan ini menciptakan tantangan maintenance dan merusak readability kode.
Peningkatan Performa
- Tools command-line: Mengurangi waktu startup dari puluhan detik menjadi hampir instan
- Notebook Jupyter : Menghilangkan penundaan import selama 10-15 menit
- Pekerjaan terdistribusi: Secara signifikan mengurangi waktu yang dihabiskan untuk memuat dependensi yang tidak digunakan
- Keseluruhan: Peningkatan waktu startup 3x lipat (berdasarkan implementasi serupa)
![]() |
---|
Grafik candlestick yang menggambarkan pergerakan harga, mencerminkan konteks keuangan di mana HRT beroperasi dan pentingnya impor yang efisien untuk aktivitas perdagangan |
Implementasi Teknis dan Tantangan
HRT meminjam konsep lazy import dari fork Python Cinder milik Meta , mengimplementasikan dua modifikasi inti pada CPython. Alih-alih mengeksekusi import secara langsung, interpreter membuat objek placeholder yang menunda pemuatan modul sebenarnya hingga nama yang diimpor direferensikan. Pendekatan ini bekerja secara transparan untuk sebagian besar use case tetapi hadir dengan keterbatasan yang notable.
Implementasi ini tidak dapat menangani import di dalam fungsi karena optimisasi variabel lokal Python, dan wildcard import tetap tidak mungkin dibuat lazy karena nama yang diekspor tidak dapat ditentukan tanpa evaluasi. Lebih signifikan lagi, modul dengan side effect - yang memodifikasi state global selama import - dapat menyebabkan bug yang subtle ketika eksekusi mereka ditunda.
Runtime import adalah mimpi buruk maintenance dan dapat dengan cepat memfragmentasi codebase. Analisis statis import sangat diinginkan sehingga hampir selalu worth untuk mengambil hit performa inisialisasi.
Komentar ini menyoroti ketegangan kunci dalam pendekatan tersebut. Meskipun lazy import memecahkan masalah performa, mereka dapat membuat perilaku kode menjadi kurang dapat diprediksi.
Keterbatasan Teknis
- Tidak dapat membuat impor lazy dalam lingkup fungsi
- Impor wildcard (
from module import *
) tidak didukung - Modul dengan efek samping memerlukan penanganan khusus
- Dependensi urutan impor dapat rusak
- Impor transitif implisit memerlukan deklarasi eksplisit
Pengalaman Migrasi dan Pelajaran yang Dipetik
Proses migrasi mengungkapkan tiga kategori utama masalah kompatibilitas. Side effect import menyebabkan tantangan debugging yang paling sulit, karena registrasi decorator dan konfigurasi global akan mengeksekusi pada waktu yang tidak terduga atau tidak sama sekali. Dependensi urutan import menjadi bermasalah ketika modul dengan side effect yang bertentangan tidak lagi load dalam urutan yang dapat diprediksi. Selain itu, implicit transitive import - di mana kode bergantung pada submodul yang diimpor oleh modul lain - rusak ketika dependensi tersebut tidak benar-benar dimuat.
HRT mengatasi masalah ini melalui kombinasi eager import block, daftar eksklusi untuk third-party package, dan manajemen dependensi eksplisit. Perusahaan menyelesaikan migrasi mereka bersamaan dengan upgrade Python 3.12 mereka, menjadikan lazy import sebagai default untuk semua kode Python pada Q2 2025.
Timeline Migrasi
- Q1 2023: Prototipe awal dikembangkan selama hackathon internal
- Q2-Q4 2023: Penyempurnaan implementasi dan migrasi tim tahap awal
- Q2 2024: 50% kompatibilitas lazy tercapai di seluruh monorepo
- Q3 2024: Portasi ke Python 3.12 selesai
- Q2 2025: Lazy imports diterapkan sebagai standar default di seluruh perusahaan
Dampak Performa dan Outlook Masa Depan
Hasilnya sangat substansial di seluruh ekosistem Python HRT . Command-line tools sekarang memberikan feedback langsung alih-alih delay startup multi-menit. Workflow notebook Jupyter yang sebelumnya memerlukan 10-15 menit waktu import sekarang start hampir secara instan. Distributed computing jobs yang menghabiskan lebih banyak waktu loading dependensi daripada mengeksekusi pekerjaan telah melihat peningkatan efisiensi yang dramatis.
Meskipun sukses, HRT mengakui beban maintenance dalam memelihara fork Python. Mereka sedang mengeksplorasi untuk mengusulkan sintaks lazy import eksplisit ke upstream Python, menggunakan keyword seperti lazy import foo daripada membuat laziness implisit. Pendekatan ini akan mengatasi kekhawatiran Python Steering Council tentang bug yang subtle sambil membuat manfaat performa tersedia untuk komunitas Python yang lebih luas.
Diskusi seputar implementasi HRT mencerminkan pertanyaan yang lebih luas tentang karakteristik performa Python dan trade-off antara convenience dan speed dalam pengembangan software skala besar.
Referensi: Inside HRT's Python Fork: Leveraging PEP 690 for Faster Imports