Saya menggunakan Flask untuk mengembangkan situs web dan saat dalam pengembangan saya menjalankan flask menggunakan file berikut:
#!/usr/bin/env python
from datetime import datetime
from app import app
import config
if __name__ == '__main__':
print '################### Restarting @', datetime.utcnow(), '###################'
app.run(port=4004, debug=config.DEBUG, host='0.0.0.0')
Ketika saya memulai server, atau ketika restart otomatis karena file telah diperbarui, itu selalu menampilkan baris cetak dua kali:
################### Restarting @ 2014-08-26 10:51:49.167062 ###################
################### Restarting @ 2014-08-26 10:51:49.607096 ###################
Meskipun ini sebenarnya bukan masalah (sisanya berfungsi seperti yang diharapkan), saya hanya bertanya-tanya mengapa ini berperilaku seperti ini? Ada ide?
app.run
), tetapi tidak menunggu permintaan pertama? Saya tidak ingin permintaan pertama itu dibebani dengan biaya inisialisasi.WERKZEUG_RUN_MAIN
variabel lingkungan dan hanya menjalankan kode Anda saatDEBUG
salah atauWERKZEUG_RUN_MAIN
disetel, misalnya. Agak membosankan.dash
untuk saya). Untuk orang lainnoobs
seperti saya, ini hanya berarti fungsionalitas di mana pengeditan / penyimpanan file memicu pembaruan langsung.Jika Anda menggunakan
flask run
perintah modern , tidak ada opsi yangapp.run
akan digunakan. Untuk menonaktifkan reloader sepenuhnya, berikan--no-reload
:Selain itu,
__name__ == '__main__'
tidak akan pernah benar karena aplikasi tidak dijalankan secara langsung. Gunakan ide yang sama dari jawaban Martijn , kecuali tanpa__main__
blok.sumber
Saya memiliki masalah yang sama, dan saya menyelesaikannya dengan menyetel
app.debug
keFalse
. Mengaturnya keTrue
menyebabkan saya__name__ == "__main__"
dipanggil dua kali.sumber
__main__
masih berlari dua kali denganapp.debug = False
danapp.run_server(debug=False)
. Apakah Anda yakin melakukannya untuk Anda, atau dapatkah Anda memposting beberapa kode yang dapat direproduksi untuk dicoba?flask
viaplotly dash
, dan menemukan mereka baru-baru ini mengubahdebug
argumen default yang diteruskan keflask
. Saya akan menebak bahwa saya salah di atas dan mungkin melakukannyaapp.debug=False
(yang mungkin diganti oleh argumen default kerun_server
), atau hanya mencoba tanpa melewatkanTrue
, tidak secara eksplisit mengatur seperti yang ditunjukkan di atas. Ini berfungsi dengan benar untuk saya sekarang (pastikan itudebug=False
). Terima kasih!Dari Flask 0,11, dianjurkan untuk menjalankan aplikasi Anda dengan
flask run
bukanpython application.py
. Menggunakan yang terakhir dapat mengakibatkan menjalankan kode Anda dua kali.Seperti yang dinyatakan di sini :
sumber
Salah satu kemungkinan alasan mengapa aplikasi Flask berjalan sendiri dua kali adalah konfigurasi
WEB_CONCURRENCY
pengaturan di Heroku. Untuk mengatur menjadi satu, Anda dapat menulis di konsolheroku config:set WEB_CONCURRENCY=1
sumber
Saya memiliki masalah yang sama. Saya menyelesaikannya dengan memodifikasi main saya dan memasukkan use_reloader = False ke dalamnya. Jika ada badan di sini yang mencari solusi untuk masalah ini, maka kode di bawah ini akan membantu Anda memulai, namun fungsionalitas perubahan dalam kode yang terdeteksi secara otomatis oleh dan memulai ulang aplikasi tidak akan berfungsi. Anda harus menghentikan dan memulai ulang aplikasi secara manual setelah setiap pengeditan kode.
sumber