- 1 名前:ひみつの名無しさん 投稿日時:2021/03/20(土) 23:31:10.419 ID:3yKbaMehM
- モジュールね
pip install socpipe
もしくは
pip3 install socpipe使い方はこれから説明する
- 2 名前:ひみつの名無しさん 投稿日時:2021/03/20(土) 23:32:19.754 ID:3yKbaMehM
- これはプロセス間通信を簡単に実現するためのモジュール
- 4 名前:ひみつの名無しさん 投稿日時:2021/03/20(土) 23:32:50.760 ID:3yKbaMehM
- 内部でsocketを使ってて、データのやり取りはjsonでやってる
- 6 名前:ひみつの名無しさん 投稿日時:2021/03/20(土) 23:33:38.457 ID:mf/U6IqX0
- パソコン物故割れた
- 7 名前:ひみつの名無しさん 投稿日時:2021/03/20(土) 23:34:18.856 ID:XMaOctIza
- ウイルスじゃん
- 8 名前:ひみつの名無しさん 投稿日時:2021/03/20(土) 23:35:41.020 ID:jjzfdmVB0
- Pythonって面白いの?
- 10 名前:ひみつの名無しさん 投稿日時:2021/03/20(土) 23:36:38.343 ID:3yKbaMehM
- >>8
面白いよ - 9 名前:ひみつの名無しさん 投稿日時:2021/03/20(土) 23:36:20.258 ID:3yKbaMehM
- で、肝心の使い方ね
2つコンソールを用意してもらって
コンソール1で何らかの関数を定義するdef add(a,b):
return a+bそんで、このaddを他のプロセスに対して公開(publish)する
api=ApiServer([add])
api.publish(50007) # 50007はポート番号 - 12 名前:ひみつの名無しさん 投稿日時:2021/03/20(土) 23:38:36.503 ID:3yKbaMehM
- >>9の続き
次に、コンソール2からコンソール1に接続し、関数addを使う
api_client=ApiClient(50007) # 50007はポート番号
print(api_client.add(1,2))
# 3と出力される - 11 名前:ひみつの名無しさん 投稿日時:2021/03/20(土) 23:38:15.220 ID:Q/5+pWlma
- これなにするやつなの?
- 15 名前:ひみつの名無しさん 投稿日時:2021/03/20(土) 23:39:42.126 ID:3yKbaMehM
- >>11
あるプロセスの関数を他のプロセスから使えるようにする
関数は前者のプロセス中で実行される - 13 名前:ひみつの名無しさん 投稿日時:2021/03/20(土) 23:38:48.469 ID:Q/5+pWlma
- あっ書いてた
- 16 名前:ひみつの名無しさん 投稿日時:2021/03/20(土) 23:40:11.218 ID:3yKbaMehM
- 以上です
簡単でそ?
- 17 名前:ひみつの名無しさん 投稿日時:2021/03/20(土) 23:41:23.144 ID:0qIosWrna
- よくわからんけど使い道があるのかないのかがいまいちわからん
- 19 名前:ひみつの名無しさん 投稿日時:2021/03/20(土) 23:43:56.615 ID:3yKbaMehM
- >>17
俺もあんまり使い道ありそうな気はしないんだけど、
強いて言うなら生のsocketを使うより簡単で、かつ
Pythonの苦手なマルチスレッドをカバーできそうかも - 18 名前:ひみつの名無しさん 投稿日時:2021/03/20(土) 23:42:05.149 ID:EAyI1fQ80
- 使い所がイメージできない
具体的にどんなときに使う? - 20 名前:ひみつの名無しさん 投稿日時:2021/03/20(土) 23:47:50.850 ID:3yKbaMehM
- >>18
うーん…俺がこれを作ろうと思ったきっかけは
サーバー上の頻繁に更新されるデータをリクエストのたびに
いちいちファイル出力して読み込んで…という事を
したくなくて作った
1つのプロセスを常駐させておいて、リクエストがあったら
そのプロセスからsocpipeによりデータを受け取れば
ストレージを使わずメモリ上だけで完結できる - 21 名前:ひみつの名無しさん 投稿日時:2021/03/20(土) 23:49:04.017 ID:3yKbaMehM
- まぁ複雑なデータの場合はmysqlとか使えばいいんだけどね
- 22 名前:ひみつの名無しさん 投稿日時:2021/03/20(土) 23:58:59.552 ID:3yKbaMehM
- まとめ
サーバーとなるプロセスで
api=ApiServer(<公開する関数のリスト>)
としてapiオブジェクトを作り、
api.publish(<好きなポート番号>,host='localhost')
で関数をポート番号に対して公開する
↓
クライアントとなるプロセスで
api=ApiServer(<上のポート番号>,host='localhost')
としてapiオブジェクトを作りつつサーバーに接続し、
api.<関数名>(引数)
で関数が使える - 24 名前:ひみつの名無しさん 投稿日時:2021/03/21(日) 00:02:50.102 ID:+hxja3MDM
- >>22訂正
クライアントの方はApiClientだ - 23 名前:ひみつの名無しさん 投稿日時:2021/03/21(日) 00:01:05.577 ID:+hxja3MDM
- 使い心地はどう?
ちなみに初めてのモジュール公開だ - 25 名前:ひみつの名無しさん 投稿日時:2021/03/21(日) 00:32:45.950 ID:L3jPzpbW0
- RPCだろ
- 27 名前:ひみつの名無しさん 投稿日時:2021/03/21(日) 00:39:39.849 ID:6g/7RbWZ0
- そんなものがあったのか…
俺が作ってたものはRPCってことになるのかな
コメント