POSIX の メッセージ・キューを使う。
プロセス間通信などと呼ばれる。POSIXのキューを使ってみる。
プロセスとプロセスのデータのやり取りにメッセージ・キューを使うことで幾分楽になる。マルチスレッド以前に複数プロセスでデータをやり取りすると複数分散して処理が楽になることもある。
動作例
ポイント
- 送信側はドンドン送信できる。
- 受信側は逐次読み込んで取り出せる。
- データが空っぽなら、受信側はブロックされる。
受信側は、なにもしなくても受信不可ならブロックされるので楽ちん。感覚的には、空っぽのパイプと同じですね。
インストール
python で使うには posix_ipc
を使う
pip install posix_ipc
Queueにメッセージを追加
#!/usr/bin/env python import json import posix_ipc def main () : mq = posix_ipc.MessageQueue("/my_q01", posix_ipc.O_CREAT ) # cnt = 0 # while True: cnt = cnt + 1 obj = { "counter": cnt } mq.send( json.dumps( obj ) ) print("pushed: %d" % cnt ) time.sleep(1) if __name__ == "__main__" : main()
Queue からメッセージを取り出す
#!/usr/bin/env python import json import posix_ipc def main () : mq = posix_ipc.MessageQueue("/my_q01", posix_ipc.O_CREAT ) # while True: data = mq.receive() print( data[0] ) time.sleep(1) if __name__ == "__main__" : main()
Queue を削除する
#!/usr/bin/env python import posix_ipc mq = posix_ipc.MessageQueue("/my_q01") mq.unlink()
コマンドからも確認できます。
参考資料
Semanchuk.com - POSIX IPC for Python - Semaphores, Shared Memory and Message Queues