- blogs:
- cles::blog
2018/04/25

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


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 を使ってログインすることができます。
サイト内検索
検索ワードランキング
へぇが多いエントリ
閲覧数が多いエントリ
1 . アーロンチェアのポスチャーフィットを修理(112101)
2 . 福岡銀がデマの投稿者への刑事告訴を検討中(110740)
3 . 年次の人間ドックへ(110343)
4 . 2023 年分の確定申告完了!(1つめ)(109899)
5 . 三菱鉛筆がラミーを買収(109798)
2 . 福岡銀がデマの投稿者への刑事告訴を検討中(110740)
3 . 年次の人間ドックへ(110343)
4 . 2023 年分の確定申告完了!(1つめ)(109899)
5 . 三菱鉛筆がラミーを買収(109798)
cles::blogについて
Referrers