Jawaban:
flask.Flask.run
menerima argumen kata kunci tambahan ( **options
) yang diteruskan ke werkzeug.serving.run_simple
- dua argumen tersebut adalah threaded
(boolean) dan processes
(yang dapat Anda atur ke nomor lebih besar dari satu agar werkzeug menelurkan lebih dari satu proses untuk menangani permintaan).
threaded
defaultnya True
sebagai pada Flask 1.0, jadi untuk versi Flask terbaru, server pengembangan default akan dapat melayani banyak klien secara bersamaan secara default. Untuk versi Flask yang lebih lama, Anda dapat secara eksplisit meneruskan threaded=True
untuk mengaktifkan perilaku ini.
Misalnya, Anda bisa melakukannya
if __name__ == '__main__':
app.run(threaded=True)
untuk menangani beberapa klien menggunakan utas dengan cara yang kompatibel dengan versi Flask lama, atau
if __name__ == '__main__':
app.run(threaded=False, processes=3)
untuk memberitahu Werkzeug untuk menelurkan tiga proses untuk menangani permintaan yang masuk, atau adil
if __name__ == '__main__':
app.run()
untuk menangani beberapa klien menggunakan utas jika Anda tahu bahwa Anda akan menggunakan Flask 1.0 atau yang lebih baru.
Yang sedang berkata, Werkzeug's serving.run_simple
membungkus wsgiref
paket perpustakaan standar - dan paket itu berisi implementasi referensi WSGI, bukan server web siap produksi. Jika Anda akan menggunakan Flask dalam produksi (dengan asumsi bahwa "produksi" bukan aplikasi internal lalu lintas rendah dengan tidak lebih dari 10 pengguna secara bersamaan) pastikan untuk menahannya di belakang server web nyata (lihat bagian dokumen Flask yang berjudul Opsi Penerapan untuk beberapa metode yang disarankan).
Menggunakan yang sederhana app.run()
dari dalam Flask menciptakan server sinkron tunggal pada utas tunggal yang hanya mampu melayani satu klien pada satu waktu. Ini dimaksudkan untuk digunakan dalam lingkungan terkontrol dengan permintaan rendah (yaitu pengembangan, debugging) untuk alasan ini.
Memunculkan thread dan mengelolanya sendiri mungkin tidak akan membuat Anda terlalu jauh, karena Python GIL .
Yang mengatakan, Anda masih memiliki beberapa opsi bagus. Gunicorn adalah server WSGI yang solid dan mudah digunakan yang akan membuat Anda menelurkan banyak pekerja (proses terpisah, sehingga tidak ada kekhawatiran GIL), dan bahkan dilengkapi dengan pekerja asinkron. yang akan mempercepat aplikasi Anda (dan membuatnya lebih aman) dengan sedikit tidak berfungsi pada bagian Anda (terutama dengan Flask).
Tetap saja, bahkan Gunicorn mungkin tidak boleh langsung diekspos secara publik. Dalam produksi, itu harus digunakan di belakang server HTTP yang lebih kuat; nginx cenderung cocok dengan Gunicorn dan Flask.
gunicorn app:app 127.0.0.1:8080
gantinya python app.py
. Nginx akan bertindak sebagai layanan publik yang mengekspos aplikasi Gunicorn-run pribadi Anda (proxy-terbalik) , menyembunyikan segala macam detail implementasi HTTP tingkat rendah, mungkin melayani file statis secara langsung, dll.
processes=100
dan senang dengan itu? Dalam kasus saya, saya hanya perlu file statis, tidak ada metode HTTP Post. Persyaratan saya adalah, saya ingin menjalankan semua utas Flask sebagai bagian dari aplikasi induk saya, sehingga semuanya dapat berbagi variabel.