Flashkは、非同期非ブロッキング要求機能の実例解析を実現する。
本論文で研究したのは主にFlashkが非同期非ブロッキング要求機能を実現することであり、具体的には以下のように実現される。
最近モノのインターネットのプロジェクトをする時、非同期のHTTPサーバを構築して、資料を調べたら、geventパッケージが使えます。
geventについて
GeventはPythonの同時ネットワークライブラリであり、libeventイベントサイクルに基づくgreenletを使用して、高級な同期APIを提供している。コードの例は以下の通りです。
下にFlashk非同期コードリストを置いて、後で必要な時に直接移植すればいいです。
なぜmokey.patchを入れますか?all()という言葉は?ゲヴィネットの公式サイトに詳しい説明があります。ここで簡単に説明します。
mokey carefully replace functions and clases in the standard socket module with their cooperate counterparts.That way eve the modules the module of gevent can benefit from running a multi-greenviement.
サルパッチは、標準的なsocketモジュールの関数やクラスを並列コードのコピーで丁寧に置換することで、モジュールを知らないうちに、geventをよりよくmulti-greenlet環境で動作させることができます。
テスト
ブラウザを開いて、まず要求します。http://127.0.0.1:5000/asyn/を選択し、
またお願いしますhttp://127.0.0.1:5000/test/このインターフェースは10回です。一般的なFlashkフレームであれば、後のインターフェースは応答しない。
印刷内容は以下の通りです。
asyn has a request
127..0.1-[2016-10-24 20:45:10]“GET/test/HTTP/1.1”200 126 0.00000
127..0.1-[2016-10-24 20:45:11]“GET/test/HTTP/1.1”200 126 0.00000
127..0.1-[2016-10-24 20:45:11]“GET/test/HTTP/1.1”200 126 0.00000
127..0.1-[2016-10-24 20:45:12]「GET/test/HTTP/1.1」200 126
127..0.1-[2016-10-24 20:45:12]「GET/test/HTTP/1.1」200 126 0.000998
127..0.1-[2016-10-24 20:45:13]「GET/test/HTTP/1.1」200 126 0.00101
127..0.1-[2016-10-24 20:45:14]“GET/test/HTTP/1.1”200 126 0.00000
127..0.1-[2016-10-24 20:45:14]「GET/test/HTTP/1.1」200 126 0.0010114
127..0.1-[2016-10-24 20:45:15]「GET/test/HTTP/1.1」200 126 0.00100
127..0.1-[2016-10-24 20:45:15]「GET/test/HTTP/1.1」200 126
127..0.1-[2016-10-24 20:45]「GET/asyn/HTTP/1.1」200 126 10.000392
締め括りをつける
以上が、Flashkが非同期非ブロッキング要求機能を実現するための実例解析のすべての内容です。興味のある方は引き続き当駅の他のテーマを参照してください。友達のサポートに感謝します。
最近モノのインターネットのプロジェクトをする時、非同期の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()
コードリスト下にFlashk非同期コードリストを置いて、後で必要な時に直接移植すればいいです。
# 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()
モンキーについてall()なぜmokey.patchを入れますか?all()という言葉は?ゲヴィネットの公式サイトに詳しい説明があります。ここで簡単に説明します。
mokey carefully replace functions and clases in the standard socket module with their cooperate counterparts.That way eve the modules the module of gevent can benefit from running a multi-greenviement.
サルパッチは、標準的なsocketモジュールの関数やクラスを並列コードのコピーで丁寧に置換することで、モジュールを知らないうちに、geventをよりよくmulti-greenlet環境で動作させることができます。
テスト
ブラウザを開いて、まず要求します。http://127.0.0.1:5000/asyn/を選択し、
またお願いしますhttp://127.0.0.1:5000/test/このインターフェースは10回です。一般的なFlashkフレームであれば、後のインターフェースは応答しない。
印刷内容は以下の通りです。
asyn has a request
127..0.1-[2016-10-24 20:45:10]“GET/test/HTTP/1.1”200 126 0.00000
127..0.1-[2016-10-24 20:45:11]“GET/test/HTTP/1.1”200 126 0.00000
127..0.1-[2016-10-24 20:45:11]“GET/test/HTTP/1.1”200 126 0.00000
127..0.1-[2016-10-24 20:45:12]「GET/test/HTTP/1.1」200 126
127..0.1-[2016-10-24 20:45:12]「GET/test/HTTP/1.1」200 126 0.000998
127..0.1-[2016-10-24 20:45:13]「GET/test/HTTP/1.1」200 126 0.00101
127..0.1-[2016-10-24 20:45:14]“GET/test/HTTP/1.1”200 126 0.00000
127..0.1-[2016-10-24 20:45:14]「GET/test/HTTP/1.1」200 126 0.0010114
127..0.1-[2016-10-24 20:45:15]「GET/test/HTTP/1.1」200 126 0.00100
127..0.1-[2016-10-24 20:45:15]「GET/test/HTTP/1.1」200 126
127..0.1-[2016-10-24 20:45]「GET/asyn/HTTP/1.1」200 126 10.000392
締め括りをつける
以上が、Flashkが非同期非ブロッキング要求機能を実現するための実例解析のすべての内容です。興味のある方は引き続き当駅の他のテーマを参照してください。友達のサポートに感謝します。