Pythonプログラム書いたから使用感聞かせてよ

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ってことになるのかな

コメント

タイトルとURLをコピーしました