Fork Python HRT Mencapai Peningkatan Prestasi Besar Melalui Pelaksanaan Lazy Import

Pasukan Komuniti BigGo
Fork Python HRT Mencapai Peningkatan Prestasi Besar Melalui Pelaksanaan Lazy Import

Hudson River Trading ( HRT ) telah berjaya menggunakan fork Python tersuai di seluruh organisasi mereka, melaksanakan lazy import untuk mengurangkan masa permulaan aplikasi Python mereka secara dramatik. Pasukan kejuruteraan firma perdagangan ini menghabiskan lebih dua tahun untuk membangun dan berpindah kepada penyelesaian ini, yang menangguhkan pemuatan modul sehingga benar-benar diperlukan semasa runtime.

Masalah Yang Mencetuskan Inovasi

Seni bina monorepo HRT , walaupun membolehkan kerjasama antara pasukan, mencipta kesesakan prestasi yang ketara. Skrip Python mereka mengimport sejumlah besar modul semasa permulaan, dengan banyak import tidak pernah digunakan semasa pelaksanaan. Ini mengakibatkan alat baris arahan mengambil masa berpuluh saat untuk bermula, notebook Jupyter memerlukan beberapa minit untuk dimuatkan, dan kerja pengkomputeran teragih menghabiskan lebih masa untuk import daripada pengiraan sebenar. Masalah ini amat teruk kerana modul mereka sering berada pada sistem fail teragih dan mengandungi kod permulaan yang berat.

Perbincangan komuniti mendedahkan ini bukan unik kepada HRT . Ramai pembangun bergelut dengan overhed import Python , terutamanya dalam pangkalan kod yang besar. Sesetengahnya menggunakan penyelesaian manual seperti meletakkan import di dalam fungsi atau menggunakan perpustakaan lazy import sedia ada, tetapi pendekatan ini mencipta cabaran penyelenggaraan dan menjejaskan kebolehbacaan kod.

Peningkatan Prestasi

  • Alat baris arahan: Mengurangkan masa permulaan daripada puluhan saat kepada hampir serta-merta
  • Buku nota Jupyter : Menghapuskan kelewatan import selama 10-15 minit
  • Kerja teragih: Mengurangkan dengan ketara masa yang dihabiskan untuk memuatkan kebergantungan yang tidak digunakan
  • Keseluruhan: Peningkatan masa permulaan sebanyak 3 kali ganda (berdasarkan pelaksanaan yang serupa)
Carta candlestick yang menggambarkan pergerakan harga, mencerminkan konteks kewangan di mana  HRT  beroperasi dan kepentingan import yang cekap untuk aktiviti perdagangan
Carta candlestick yang menggambarkan pergerakan harga, mencerminkan konteks kewangan di mana HRT beroperasi dan kepentingan import yang cekap untuk aktiviti perdagangan

Pelaksanaan Teknikal dan Cabaran

HRT meminjam konsep lazy import daripada fork Python Cinder Meta , melaksanakan dua pengubahsuaian teras kepada CPython . Daripada melaksanakan import serta-merta, penterjemah mencipta objek placeholder yang menangguhkan pemuatan modul sebenar sehingga nama yang diimport dirujuk. Pendekatan ini berfungsi secara telus untuk kebanyakan kes penggunaan tetapi datang dengan batasan yang ketara.

Pelaksanaan tidak dapat mengendalikan import dalam fungsi disebabkan pengoptimuman pembolehubah tempatan Python , dan wildcard import kekal mustahil untuk dibuat lazy kerana nama yang dieksport tidak dapat ditentukan tanpa penilaian. Lebih ketara lagi, modul dengan kesan sampingan - yang mengubah suai keadaan global semasa import - boleh menyebabkan pepijat halus apabila pelaksanaan mereka ditangguhkan.

Runtime import adalah mimpi ngeri penyelenggaraan dan boleh memecah-belahkan pangkalan kod dengan cepat. Analisis statik import sangat diingini sehingga hampir selalu berbaloi dengan kesan prestasi permulaan.

Komen ini menyerlahkan ketegangan utama dalam pendekatan tersebut. Walaupun lazy import menyelesaikan masalah prestasi, ia boleh menjadikan tingkah laku kod kurang boleh diramal.

Had Teknikal

  • Tidak boleh menjadikan import sebagai lazy dalam skop fungsi
  • Import wildcard (from module import *) tidak disokong
  • Modul dengan kesan sampingan memerlukan pengendalian khas
  • Kebergantungan susunan import mungkin akan rosak
  • Import transitif tersirat memerlukan pengisytiharan eksplisit

Pengalaman Migrasi dan Pengajaran

Proses migrasi mendedahkan tiga kategori utama isu keserasian. Kesan sampingan import menyebabkan cabaran nyahpepijat yang paling sukar, kerana pendaftaran decorator dan konfigurasi global akan dilaksanakan pada masa yang tidak dijangka atau tidak sama sekali. Pergantungan susunan import menjadi bermasalah apabila modul dengan kesan sampingan yang bercanggah tidak lagi dimuatkan dalam urutan yang boleh diramal. Selain itu, import transitif tersirat - di mana kod bergantung pada submodul yang diimport oleh modul lain - rosak apabila pergantungan tersebut tidak benar-benar dimuatkan.

HRT menangani isu ini melalui gabungan blok eager import, senarai pengecualian untuk pakej pihak ketiga, dan pengurusan pergantungan eksplisit. Firma itu melengkapkan migrasi mereka bersama-sama dengan peningkatan Python 3.12 mereka, menjadikan lazy import sebagai lalai untuk semua kod Python menjelang Q2 2025.

Garis Masa Migrasi

  • S1 2023: Prototaip awal dibangunkan semasa hackathon dalaman
  • S2-S4 2023: Penambahbaikan pelaksanaan dan migrasi pasukan awal
  • S2 2024: 50% keserasian lazy dicapai merentasi monorepo
  • S3 2024: Pemindahan ke Python 3.12 selesai
  • S2 2025: Lazy imports digunakan sebagai lalai di seluruh firma

Kesan Prestasi dan Pandangan Masa Depan

Keputusan telah menjadi besar di seluruh ekosistem Python HRT . Alat baris arahan kini memberikan maklum balas serta-merta daripada kelewatan permulaan berbilang minit. Alur kerja notebook Jupyter yang sebelum ini memerlukan 10-15 minit masa import kini bermula hampir serta-merta. Kerja pengkomputeran teragih yang menghabiskan lebih masa memuatkan pergantungan daripada melaksanakan kerja telah melihat peningkatan kecekapan yang dramatik.

Walaupun berjaya, HRT mengakui beban penyelenggaraan memelihara fork Python . Mereka sedang meneroka cadangan sintaks lazy import eksplisit kepada upstream Python , menggunakan kata kunci seperti lazy import foo daripada menjadikan kemalasan tersirat. Pendekatan ini akan menangani kebimbangan Python Steering Council tentang pepijat halus sambil menjadikan faedah prestasi tersedia kepada komuniti Python yang lebih luas.

Perbincangan sekitar pelaksanaan HRT mencerminkan persoalan yang lebih luas tentang ciri prestasi Python dan pertukaran antara kemudahan dan kelajuan dalam pembangunan perisian berskala besar.

Rujukan: Inside HRT's Python Fork: Leveraging PEP 690 for Faster Imports