BLOGTIMES
2018/04/25

Python から SystemV IPC 共有メモリを使う

  python  systemv 
このエントリーをはてなブックマークに追加

Python から複数プロセスで共有できるメモリが使いたかったので、sysv_ipc.SharedMemory を試してみました。

まずはセットアップ

インストールは pip を使うと一撃で完了します。

pip install sysv_ipc

サンプルプログラム

0 と 1 を交互に書き込む処理を書いてみました。
SHMID は共有メモリを表す ID ですので、他のプログラムと被らない値を設定する必要があります。

#!/usr/bin/env python # -*- coding: utf-8 -*- import sysv_ipc as ipc SHMID = 128 shm = ipc.SharedMemory(SHMID, ipc.IPC_CREAT, mode=0666, size=1) def toggle(): stat = shm.read() if stat == "1": shm.write("0") print(u"1→0") else: shm.write("1") print(u"0→1") toggle()

実行例

$ python toggletest.py 0→1 $ python toggletest.py 1→0 $ python toggletest.py 0→1 $ python toggletest.py 1→0 $ ipcs -m ------ Shared Memory Segments -------- key shmid owner perms bytes nattch status 0x00000080 294915 pi 666 1 0

制限事項

あくまでサンプルなので、厳密な排他制御をしていません
複数プロセスから読み書きする場合には(たぶん)レースコンディションが生じる場合があります

また、mode を 666 にしてしまっているので、実際に使う場合は適切なパーミッションにする必要があります。


    トラックバックについて
    Trackback URL:
    お気軽にどうぞ。トラックバック前にポリシーをお読みください。[policy]
    このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/10133
    Trackbacks
    このエントリにトラックバックはありません
    Comments
    愛のあるツッコミをお気軽にどうぞ。[policy]
    古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
    コメントはありません
    Comments Form

    コメントは承認後の表示となります。
    OpenIDでログインすると、即時に公開されます。

    OpenID を使ってログインすることができます。

    Identity URL: Yahoo! JAPAN IDでログイン