Giampaolo Rodola' <[email protected]> added the comment:
> Because shared memory blocks are not "owned" by a single process, they are
> not destroyed/freed when a process exits.
1) it seems SharedMemory.close() does not destroy the memory region (I'm able
to re-attach to it via name). If I'm not mistaken only the manager can do that.
As such it probably makes sense to have an unlink() or destroy() methods. Maybe
SharedMemory should support the with statement.
2) it seems SharedMemory is only supposed to handle `memoryview`s. I suggest to
turn SharedMemory.buf in a read-onl property:
>>> sm = shared_memory.SharedMemory(None, size=23)
>>> sm.buf = [1,2,3]
>>> sm.close()
File "/home/giampaolo/svn/cpython-shm/Lib/multiprocessing/shared_memory.py",
line 166, in close
self.buf.release()
AttributeError: 'list' object has no attribute 'release'
3) it seems "size" kwarg cannot be zero (current default). Suggestion: either
choose default != 0 or make it a mandatory arg:
>>> shared_memory.SharedMemory(name=None)
ValueError: cannot mmap an empty file
>>> shared_memory.SharedMemory(name=None, size=0)
ValueError: cannot mmap an empty file
>>> shared_memory.SharedMemory(name=None, size=1)
PosixSharedMemory('psm_32161_20838', size=1)
>>>
4) I wonder if we should have multiprocessing.active_memory_children() or
something, similar to multiprocessing.active_children() so that one can do:
@atexit.register
def cleanup():
for x in multiprocessing.active_memory_children():
x.close() # or unlink/destroy
I guess that would be useful for people not using a manager. Also, I'm not sure
if active_memory_children() can return meaningful results with a brand new
process (I suppose it can't).
----------
_______________________________________
Python tracker <[email protected]>
<https://bugs.python.org/issue35813>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe:
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com