Double Restart Printout dalam Flask Dev Server
Apabila menjalankan pelayan pembangunan tapak web menggunakan Flask, pengguna telah melihat tingkah laku anomali apabila pelayan dimulakan semula mesej muncul dua kali dan bukannya sekali. Untuk memahami sebab di sebalik ini, mari kita mendalami mekanik pelayan pembangunan Flask.
Flask menggunakan Werkzeug, perpustakaan utiliti WSGI, untuk melancarkan pelayan pembangunan melalui kaedah app.run(). Werkzeug menggunakan teknik yang dipanggil "muat semula" untuk memulakan semula pelayan secara automatik apabila mengesan perubahan dalam kod. Proses pemuatan semula melibatkan pembentukan proses anak yang menjalankan skrip Flask anda sekali lagi menggunakan subprocess.call().
Proses anak ini menganggap kod yang sama seperti proses induk, yang membawa kepada pelaksanaan dua kali mesej mulakan semula. Untuk menghapuskan tingkah laku ini, tetapkan parameter use_reloader app.run() kepada False. Sebagai alternatif, lumpuhkan pemuat semula semasa pelaksanaan baris perintah Flask:
FLASK_DEBUG=1 flask run --no-reload
Untuk senario lanjutan di mana pengesanan kehadiran proses anak muat semula adalah penting, gunakan fungsi is_running_from_reloader() Werkzeug. Walau bagaimanapun, adalah dinasihatkan untuk menggunakan penghias @app.before_first_request untuk memulakan modul global, menjamin satu pelaksanaan selepas setiap muat semula.
@app.before_first_request def before_first_request(): print(f"########### Restarted, first request @ {datetime.utcnow()} ############")
Perhatikan bahawa pengendali before_first_request mungkin digunakan untuk setiap subproses baharu dalam WSGI skala penuh pelayan yang menggunakan forking atau subproses baharu.
Atas ialah kandungan terperinci Mengapa Pelayan Dev Flask Saya Menunjukkan Mesej Mulakan Semula Berganda?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!