Skip to content

Instantly share code, notes, and snippets.

@larsr
Created September 23, 2014 16:32
Show Gist options
  • Save larsr/bd5cadecb1ab5e6c718b to your computer and use it in GitHub Desktop.
Save larsr/bd5cadecb1ab5e6c718b to your computer and use it in GitHub Desktop.
import mmap
import posix_ipc
import os
import sys
def create_shared_mem(sm_name, size):
sm = posix_ipc.SharedMemory(sm_name, flags=posix_ipc.O_CREX, size=size)
return mmap.mmap(sm.fd, sm.size)
def open_shared_mem(sm_name):
sm = posix_ipc.SharedMemory(sm_name,flags=0)
return mmap.mmap(sm.fd, sm.size)
def worker(sm_name):
id = os.getpid()
mem = open_shared_mem( sm_name )
while True:
mem.seek(0)
x = mem.read(5)
mem.seek(0)
mem.write("%5d" % id)
print "read '%s' wrote '%5d'" % (x, id)
def master():
sm_name = '/shared-memory-%d' % os.getpid()
m = create_shared_mem( sm_name, size=1000 )
print sm_name
raw_input("press <return> to start")
for i in range(3):
if True:
os.system('python %s %s &' % (sys.argv[0], sm_name))
else:
import multiprocessing
multiprocessing.Process(target=worker, args=(sm_name,)).start()
worker(sm_name)
if __name__ == '__main__':
if len(sys.argv) == 1:
master()
else:
worker(sm_name=sys.argv[1])
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment