91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Flask如何實現異步非阻塞請求功能

發布時間:2021-07-10 10:41:16 來源:億速云 閱讀:696 作者:小新 欄目:編程語言

這篇文章主要介紹Flask如何實現異步非阻塞請求功能,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

具體實現如下。

最近做物聯網項目的時候需要搭建一個異步非阻塞的HTTP服務器,經過查找資料,發現可以使用gevent包。

關于gevent

Gevent 是一個 Python 并發網絡庫,它使用了基于 libevent 事件循環的 greenlet 來提供一個高級同步 API。下面是代碼示例:

from gevent.wsgi import WSGIServer
from yourapplication import app

http_server = WSGIServer(('', 5000), app)
http_server.serve_forever()

代碼清單

下面放上Flask異步非阻塞的代碼清單,以后需要用到的時候直接移植即可。

# coding=utf-8
# Python Version: 3.5.1

# Flask
from flask import Flask, request, g

# gevent
from gevent import monkey
from gevent.pywsgi import WSGIServer
monkey.patch_all()
# gevent end

import time

app = Flask(__name__)
app.config.update(DEBUG=True)

@app.route('/asyn/', methods=['GET'])
def test_asyn_one():
  print("asyn has a request!")
  time.sleep(10)
  return 'hello asyn'


@app.route('/test/', methods=['GET'])
def test():
  return 'hello test'


if __name__ == "__main__":
  # app.run()
  http_server = WSGIServer(('', 5000), app)
  http_server.serve_forever()

關于monkey.patch_all()

為什么要加monkey.patch_all()這一條語句呢?在gevnet的官網有詳細的解釋,這里簡單說明一下:

monkey carefully replace functions and classes in the standard socket module with their cooperative counterparts. That way even the modules that are unaware of gevent can benefit from running in a multi-greenlet environment.

翻譯:猴子補丁仔細的用并行代碼副本替換標準socket模塊的函數和類,這種方式可以使模塊在不知情的情況下讓gevent更好的運行于multi-greenlet環境中。

測試

打開瀏覽器,首先請求http://127.0.0.1:5000/asyn/,然后
再請求http://127.0.0.1:5000/test/這個接口十次。如果是一般的Flask框架,后面的接口是沒有響應的。

打印內容如下:

asyn has a request!
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

以上是“Flask如何實現異步非阻塞請求功能”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

大同市| 江门市| 盐津县| 敦化市| 那坡县| 蒙阴县| 方山县| 黄陵县| 托克托县| 台东市| 丹江口市| 大安市| 蒙山县| 阳曲县| 阳春市| 合江县| 黑水县| 柳州市| 阳山县| 江津市| 枝江市| 海宁市| 盘锦市| 天台县| 湾仔区| 宜章县| 根河市| 资中县| 永康市| 禄丰县| 武城县| 葵青区| 靖西县| 澜沧| 山东省| 鹰潭市| 西乡县| 天长市| 永德县| 松原市| 格尔木市|