Pythonでプロセス間通信をしたい、プロトコルはHTTPで、データフォーマットはJSON。なるべく1つのスクリプトファイルでサーバーやクライアントを提供したい。
こんな感じの要件。
元々Flaskが使われてるプロジェクトだったので、Flaskで全部やればいいかーと思ってました。
しかし、WerkzeugがUNIXドメインソケットに対応していなかったので、Waitressを使うことにしました。
クライアント側はRequrestsを使おうとしたけど、そちらも追加のコードが必要でした。
これはrequests-unixsocketという都合のいいパッケージがあったので使いました。
Pythonのバージョンは3.6。
ソースコード
requirements.txt
flask waitress requests requests-unixsocket
server.py
from waitress import serve from flask import Flask, jsonify app = Flask(__name__) @app.route('/endpoint/') def index(): return jsonify({'result': 'OK'}) def main(): serve(app, unix_socket='/tmp/app.sock') if __name__ == '__main__': main()
client.py
import requests_unixsocket def main(): session = requests_unixsocket.Session() resp = session.get('http+unix://%2ftmp%2fapp.sock/endpoint/') print(resp.json()) if __name__ == '__main__': main()
実行結果
server
(venv) $ python server.py Serving on http://unix:/tmp/app.sock
client
(venv) $ python client.py {'result': 'OK'}
便利ですね。