我在 multiprocessing.shared_memory.SharedMemory
上的
Python 文档网站中运行了
Python 3.8
类的 first示例。它按预期工作。但是,当我从 separate 脚本附加到共享内存时(creator script 将 wait
30
秒进行 attachment),如下所示:
创作者脚本:
def main():
shm_a = shared_memory.SharedMemory(create = True, size = 10)
buffer = shm_a.buf
buffer[:4] = bytearray([22, 33, 44, 55])
buffer[4] = 100
print(shm_a.name)
sleep(30) # added to the example code
shm_a.close()
shm_a.unlink()
附件脚本:
def main():
shm_b = shared_memory.SharedMemory('psm_2551129c') # psm_2551129c returned by the generator script
array.array('b', shm_b.buf[:5])
shm_b.buf[:5] = b'howdy'
print(bytes(shm_b.buf[:5]))
shm_b.close()
以下错误分别发生在attacher和creator脚本中:
附件脚本错误:
ahmad@Ahmad-Laptop:~$ /usr/lib/python3.8/multiprocessing/resource_tracker.py:203: UserWarning: resource_tracker: There appear to be 1 leaked shared_memory objects to clean up at shutdown
warnings.warn('resource_tracker: There appear to be %d '
创建者脚本错误:
/usr/lib/python3.8/multiprocessing/resource_tracker.py:203: UserWarning: resource_tracker: There appear to be 1 leaked shared_memory objects to clean up at shutdown
warnings.warn('resource_tracker: There appear to be %d '
/usr/lib/python3.8/multiprocessing/resource_tracker.py:216: UserWarning: resource_tracker: '/psm_7978b751': [Errno 2] No such file or directory: '/psm_7978b751'
warnings.warn('resource_tracker: %r: %s' % (name, e))
请注意,after attacher script 返回错误(并且 before creator script 返回),sudo lsof|grep -i psm
的 output
如下:
python3.8 13463 root DEL REG 0,24 3 /dev/shm/psm_2551129c
python3.8 13463 root 3u REG 0,24 10 3 /dev/shm/psm_2551129c (deleted)
python3.8 13463 root 4u REG 0,24 10 3 /dev/shm/psm_2551129c (deleted)
在同一时间,/dev/shm/psm_2551129c
这似乎是 Python 库中的一个错误。
看这个答案
看起来它将在计划于 2024 年 10 月发布的 Python 3.13 中修复(或解决),并且在“读取”过程中需要一个额外的参数track=True
虽然很容易重现这个问题,但我也发现它并不总是发生。