Apa yang akan terjadi jika saya memodifikasi skrip Python saat sedang berjalan?
219
Bayangkan sebuah skrip python yang akan memakan waktu lama untuk dijalankan, apa yang akan terjadi jika saya memodifikasinya saat sedang berjalan? Akankah hasilnya berbeda?
Program ini dimuat ke dalam memori utama Anda. Jika Anda mengubah file sumber, tidak ada yang terjadi. Bayangkan CPU akan membaca instruksi dari hard drive ...
Felix Kling
15
@ Feliks: Itu disebut "Execute-in-Place" (XIP).
Ignacio Vazquez-Abrams
@Ignacio: Menarik, saya tidak tahu itu. Terima kasih :)
Catatan bahwa Windows batch file yang mengeksekusi di tempat, jadi ini bukan pertanyaan hipotetis, ada bahasa di luar sana yang berperilaku dengan cara ini.
yoyo
Jawaban:
259
Tidak ada, karena Python mengkompilasi naskah Anda menjadi file PYC dan meluncurkannya.
Namun, jika beberapa jenis pengecualian terjadi, Anda mungkin mendapatkan penjelasan yang sedikit menyesatkan, karena baris X mungkin memiliki kode yang berbeda dari sebelum Anda memulai skrip.
Tetapi bagaimana jika Anda meluncurkan kembali saat menjalankan, ketika file pyc baru menimpa yang lama, apakah itu akan menyebabkan masalah dalam program yang sudah berjalan atau tidak?
decaviatedcaviar
26
Tidak ada yang terjadi. Saya juga memeriksanya dalam tes kecil. Apa yang terjadi: pyc hanya kompilasi. Dan kompilasi ini dimuat ke dalam RAM dan kemudian dieksekusi. Jadi selalu mungkin untuk mengubah program, mengkompilasi ulang dan menjalankan contoh lain misalnya di konsol yang berbeda.
Chris
7
@ Chris Saya memulai contoh skrip python saya di satu konsol. Sementara itu sedang berjalan, saya mengubah dua baris kode dan mulai contoh lain di konsol yang terpisah. Setelah beberapa saat, saya mendapatkan kesalahan dari konsol pertama tentang dua baris kode yang saya ubah setelah memulainya! tolong bantu
double_j
14
@ Chris Saya pikir saya tahu apa yang terjadi di sini. Jika Anda memodifikasi skrip dan menyimpan ketika sedang berjalan, dan kesalahan versi sebelumnya, dalam pembacaan traceback, itu membuka versi file saat ini dan membuat traceback terlihat berbeda dari ketika Anda mulai. Saya telah melihat ini sendiri pada beberapa kesempatan.
Jawaban:
Tidak ada, karena Python mengkompilasi naskah Anda menjadi file PYC dan meluncurkannya.
Namun, jika beberapa jenis pengecualian terjadi, Anda mungkin mendapatkan penjelasan yang sedikit menyesatkan, karena baris X mungkin memiliki kode yang berbeda dari sebelum Anda memulai skrip.
sumber