Pelayan Pembangunan Flask Melaksanakan Dua Kali: Mendedahkan Sebab
Pelayan pembangunan Flask mengendalikan permulaan semula aplikasi anda apabila perubahan dibuat pada kod anda . Fungsi ini disediakan oleh fungsi restart_with_reloader() perpustakaan Werkzeug.
Fungsi ini menghasilkan proses anak, melaksanakan skrip anda sekali lagi menggunakan subprocess.call(). Akibatnya, kedua-dua skrip asal dan proses anak mencetak mesej mulakan semula sekali setiap satu, menghasilkan tingkah laku cetakan berganda yang diperhatikan.
Lumpuhkan Pemuat Semula
Untuk menghapuskan tingkah laku ini , lumpuhkan pemuat semula dengan menetapkan use_reloader kepada False:
app.run(port=4004, debug=config.DEBUG, host='0.0.0.0', use_reloader=False)
Sebagai alternatif, anda boleh menggunakan arahan larian kelalang dengan bendera --no-reload:
FLASK_DEBUG=1 flask run --no-reload
Kesan Proses Pemuat Semula
Gunakan fungsi werkzeug.serving.is_running_from_reloader() untuk mengesan proses kanak-kanak:
from werkzeug.serving import is_running_from_reloader if is_running_from_reloader(): print(f"################### Restarting @ {datetime.utcnow()} ###################")
Gunakan @app.before_first_request Penghias
Jika anda perlu menetapkan modul global, pertimbangkan untuk menggunakan penghias @app.before_first_request:
@app.before_first_request def before_first_request(): print(f"########### Restarted, first request @ {datetime.utcnow()} ############")
Penghias ini melaksanakan fungsi sekali selepas setiap muat semula, apabila permintaan pertama adalah dibuat.
Nota:
Dalam pelayan WSGI skala penuh yang menggunakan forking atau subproses untuk mengendalikan permintaan, pengendali before_first_request boleh digunakan untuk setiap subproses.
Atas ialah kandungan terperinci Mengapa Pelayan Pembangunan Flask Saya Nampak Melaksanakan Dua Kali?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!