Penelitian utama dalam makalah ini adalah bahwa Flask mengimplementasikan fungsi permintaan non-blocking asinkron, dan implementasi spesifik adalah sebagai berikut.
Baru-baru ini, ketika saya sedang mengerjakan proyek IoT, saya perlu membangun server HTTP non-blocking asinkron. Setelah mencari informasi, saya menemukan bahwa saya dapat menggunakan paket gevent.
Gevent adalah perpustakaan jaringan bersamaan Python yang menggunakan greenlets berdasarkan loop acara Libevent untuk memberikan API sinkronisasi canggih. Berikut adalah contoh kode:
dari gevent.wsgi impor wsgiserver dari applikasi apphttp_server = wsgiserver (('', 5000), aplikasi) http_server.serve_forever ()Di bawah ini adalah daftar kode non-blocking asinkron Flask, dan port secara langsung saat dibutuhkan di masa depan.
# Coding = UTF-8# Python Versi: 3.5.1# FlaskFrom Flask Impor Flask, Permintaan, G# GeventFrom Gevent Impor MonkeyFrom Gevent.Pywsgi Impor WSGISERVERRMONKEY.PATCH_ALL ()# gevent endimport timeApp = Flask (__ Nama __) app.config.update(debug=true)@app.route ('/asyn/', Methods = ['get']) def test_asyn_one (): print ("asyn memiliki permintaan!") Waktu. __name__ == "__main__" ": # app.run () http_server = wsgiserver (('', 5000), app) http_server.serve_forever ()Mengapa menambahkan pernyataan monkey.patch_all ()? Ada penjelasan terperinci di situs web resmi Gevnet, berikut adalah penjelasan singkat:
Monyet dengan hati -hati mengganti fungsi dan kelas dalam modul soket standar dengan rekan -rekan koperasi mereka. Dengan begitu modul yang tidak mengetahui gevent dapat mengambil manfaat dari berlari di lingkungan multi-greenlet.
Terjemahan: Monkey Patch dengan cermat menggantikan fungsi dan kelas modul soket standar dengan salinan kode paralel. Dengan cara ini, modul dapat memungkinkan gevent untuk berjalan lebih baik di lingkungan multi-greenlet tanpa menyadarinya.
Buka browser, permintaan pertama http://127.0.0.1:5000/asyn/, lalu minta http://127.0.0.1:5000/test/ antarmuka ini sepuluh kali. Jika itu adalah kerangka kerja labu umum, antarmuka selanjutnya tidak akan merespons.
Konten cetak adalah sebagai berikut:
Asyn memiliki permintaan!
127.0.0.1 - - [2016-10-24 20:45:10] "Get/test/http/1.1" 200 126 0.000000
127.0.0.1 - - [2016-10-24 20:45:11] "Get/test/http/1.1" 200 126 0.000000
127.0.0.1 - - [2016-10-24 20:45:11] "Get/test/http/1.1" 200 126 0.000000
127.0.0.1 - - [2016-10-24 20:45:12] "Get/test/http/1.1" 200 126 0.000000
127.0.0.1 - - [2016-10-24 20:45:12] "Get/test/http/1.1" 200 126 0.000998
127.0.0.1 - - [2016-10-24 20:45:13] "Get/test/http/1.1" 200 126 0.001001
127.0.0.1 - - [2016-10-24 20:45:14] "Get/test/http/1.1" 200 126 0.000000
127.0.0.1 - - [2016-10-24 20:45:14] "Get/test/http/1.1" 200 126 0.001014
127.0.0.1 - - [2016-10-24 20:45:15] "Get/test/http/1.1" 200 126 0.001000
127.0.0.1 - - [2016-10-24 20:45:15] "Get/test/http/1.1" 200 126 0.000000
127.0.0.1 - - [2016-10-24 20:45:18] "get/asyn/http/1.1" 200 126 10.000392
Di atas adalah semua konten dari artikel ini tentang implementasi Flask tentang analisis instance fungsi non-blocking asinkron, saya harap ini akan membantu semua orang. Teman yang tertarik dapat terus merujuk ke topik terkait lainnya di situs ini. Jika ada kekurangan, silakan tinggalkan pesan untuk menunjukkannya. Terima kasih teman atas dukungan Anda untuk situs ini!