相互運用性のため、アプリケーションをWebサービスとしてデプロイする必要があります。私はそれを行うためにSpyne(http://spyne.io/)を使用しています。これはws用のPythonフレームワークです。ここまでは順調ですね。
ただし、サービスは一度に複数のリクエストを受け取ります。したがって、リクエストはいくつかのI / O(データベース、ファイル)タスクを実行するため、パフォーマンスを向上させる必要があります。
次のコードは、Spyneの基本的なWebサービスの例です。それに基づいて、Spyneはスレッドプールまたはスレッドをサポートしていますか?サービスをアクティブ化または複数のスレッドでラップするにはどうすればよいですか?不可能な場合、Pythonスレッドライブラリでそれをどのように達成できますか?
前もって感謝します。
from spyne import Application, rpc, ServiceBase, Integer
from spyne.protocol.soap import Soap11
from spyne.server.wsgi import WsgiApplication
class HelloWorldService(ServiceBase):
@rpc(Integer, Integer, _returns=Integer)
def multiply(ctx, a, b):
return a * b
application = Application([HelloWorldService],
tns='spyne.multiply',
in_protocol=Soap11(validator='lxml'),
out_protocol=Soap11()
)
if __name__ == '__main__':
# You can use any Wsgi server. Here, we chose
# Python's built-in wsgi server but you're not
# supposed to use it in production.
from wsgiref.simple_server import make_server
wsgi_app = WsgiApplication(application)
server = make_server('0.0.0.0', 8000, wsgi_app)
server.serve_forever()
Spyneは、シングルスレッドまたはマルチスレッドの設定でブロッキング/非同期コードの両方で動作します。
複数のスレッドで同時実行を行う必要がある場合は、CherryPy、Twisted、mod_wsgiなどの複数のスレッドを処理できるWSGIサーバーを使用します。コードサンプル(wsgiref)で使用するWSGIリファレンス実装は同時実行をサポートしていません。
非同期メソッド呼び出しで並行性を実現する必要がある場合は、Twistedを使用してください。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加