Python Mengguna Pakai Import Malas untuk Mempercepatkan Masa Permulaan

Pasukan Komuniti BigGo
Python Mengguna Pakai Import Malas untuk Mempercepatkan Masa Permulaan

Pembangun Python telah lama mencari cara untuk mengurangkan masa permulaan aplikasi, terutamanya untuk projek besar dengan banyak kebergantungan. Usaha berterusan komuniti kini memuncak dalam PEP 810, Import malas eksplisit, yang baru-baru ini diterima oleh Majlis Pemandu Python. Ini menandakan satu pencapaian penting selepas percubaan sebelumnya, termasuk PEP 690 yang ditolak, menunjukkan komitmen komuniti Python untuk menyelesaikan kebuntuan prestasi sambil mengekalkan kestabilan bahasa.

Perjalanan Panjang ke Import Malas

Perjalanan untuk melaksanakan import malas dalam Python telah mengambil masa bertahun-tahun. Pelbagai pendekatan telah diterokai, termasuk penyelesaian pihak ketiga dan cabang CPython yang melaksanakan versi mereka sendiri untuk mengimport secara malas. Penerimaan PEP 810 mewakili satu penyelesaian yang dipertimbangkan dengan teliti yang dibina berdasarkan kerja sebelumnya sambil menangani kebimbangan tentang kebolehramalan dan kebolehkekalan kod. Majlis Pemandu Python meluluskan cadangan itu sebulat suara, menyatakan bahawa ia merupakan satu ciri yang diingini oleh ramai dalam komuniti Python untuk tempoh yang lama dan bahawa pelaksanaan ini mencapai keseimbangan yang tepat.

Bagaimana Import Malas Berfungsi

Pelaksanaan baharu ini memperkenalkan kata kunci lembut lazy yang boleh mendahului kenyataan import, mengubah bila modul sebenarnya dimuatkan. Daripada memuatkan semua modul serta-merta apabila skrip bermula, import malas menangguhkan pemuatan sehingga modul atau atribut yang diimport diakses buat kali pertama. Ini boleh mengurangkan masa permulaan dengan ketara untuk aplikasi yang mengimport banyak modul tetapi tidak menggunakan kesemuanya serta-merta. Kata kunci ini sensitif kepada konteks, bermakna ia hanya mempunyai makna khas apabila muncul sebelum kenyataan import dan boleh digunakan sebagai pengecam biasa di tempat lain.

Ini akan menjadi sangat besar di tempat saya bekerja! Saya tidak biasa dengan proses PEP. Berapa lama sehingga ini dimasukkan ke dalam versi Python?

Sambutan komuniti amat positif, dengan ramai pembangun mengenal pasti faedah praktikal serta-merta untuk projek mereka. Ciri ini dijadualkan untuk dimasukkan dalam Python 3.15, dijangkakan pada Oktober 2025, memberi masa kepada pembangun untuk bersedia mengguna pakainya.

Garis Masa Pelaksanaan Python Lazy Imports

  • PEP Diterima: November 2024
  • Jangkaan Pelancaran: Python 3.15 (Oktober 2025)
  • Jenis Pelaksanaan: Kata kunci lembut lazy
  • Mod Global: "normal", "all", "none"

Mengimbangi Prestasi dan Kebolehramalan

Salah satu cabaran utama yang ditangani oleh PEP 810 ialah mengekalkan kebolehramalan kod sambil memperoleh faedah prestasi. Tidak seperti beberapa pendekatan sebelumnya yang mencadangkan pemuatan malas tersirat, kata kunci eksplisit lazy memastikan pembangun dapat segera mengenal pasti bila import ditangguhkan. Keterlihatan ini amat penting kerana import malas mengubah bila ralat dan kesan sampingan berlaku—mengalihkannya dari masa import kepada penggunaan pertama. PEP juga termasuk pilihan konfigurasi global, membolehkan pasukan menetapkan kelakuan import malas merentas keseluruhan projek sambil mengekalkan keupayaan untuk mengatasi di tapak import individu.

Kaedah Konfigurasi untuk Lazy Imports

  1. Pembolehubah persekitaran: $PYTHON_LAZY_IMPORTS=<mode>
  2. Pilihan baris arahan: -X lazy_imports=<mode>
  3. API programatik: sys.set_lazy_imports(<mode>)
  4. Import individu: lazy import module_name

Kesan Dunia Sebenar dan Kes Penggunaan

Faedahnya melampaui peningkatan prestasi teori. Projek seperti IPython telah pun berusaha untuk mengoptimumkan masa permulaan melalui pelbagai strategi import. Seperti yang dinyatakan oleh seorang pengulas mengenai pengalaman mereka dengan Lua, mentakrifkan kebergantungan tepat sebelum ia sebenarnya digunakan menjadikan program Lua yang besar jauh lebih pantas. Begitu juga, aplikasi Python dengan pokok kebergantungan yang mendalam atau ciri pilihan yang mungkin tidak digunakan dalam setiap sesi berpotensi mendapat faedah paling banyak. Sifat eksplisit pelaksanaan ini juga membantu mengelakkan lerengan licin perubahan tingkah laku tersirat yang membimbangkan beberapa ahli komuniti semasa cadangan sebelumnya.

Butiran Pelaksanaan dan Batasan

PEP menyatakan bahawa import kad liar (from module import *) tidak boleh menjadi malas kerana set nama yang diimport tidak dapat ditentukan tanpa memuatkan modul. Tambahan pula, pelaksanaan ini termasuk langkah keselamatan terhadap penyembunyian tingkah laku berkaitan import yang sukar dalam perpustakaan piawai. Pembangun boleh mengawal kelakuan import malas melalui pembolehubah persekitaran ($PYTHON_LAZY_IMPORTS), bendera baris arahan (-X lazy_imports), dan API berprogram (sys.set_lazy_imports()), menyediakan pelbagai tahap kawalan untuk senario penyebaran yang berbeza.

Penggunaan pakai import malas dalam Python mewakili satu langkah penting ke hadapan untuk ciri prestasi bahasa, terutamanya untuk aplikasi berskala besar. Dengan menyediakan mekanisme eksplisit dan jelas untuk menangguhkan pemuatan modul, komuniti Python telah menangani keperluan yang lama wujud sambil mengekalkan komitmen bahasa terhadap kebolehbacaan dan kebolehramalan. Apabila pembangun mula mengguna pakai ciri ini pada akhir 2025, kita boleh menjangkakan untuk melihat peningkatan yang boleh diukur dalam masa permulaan aplikasi merentas ekosistem Python.

Rujukan: PEP 690: Lazy imports