【问题标题】:Does multiprocessing.shared_memory require locking?multiprocessing.shared_memory 是否需要锁定?
【发布时间】:2020-11-29 08:47:10
【问题描述】:

我正在学习 Python 中的共享内存,尤其是 python 3.8 模块multiprocessing.shared_memory。我没有看到文档中提到锁定。 (尽管父模块multiprocessing 有一个Lock 对象)。锁定是否在multiprocessing.shared_memory 或/dev/shm 的底层代码中以某种方式处理?也就是说,在没有显式锁定的情况下同时从多个进程写入SharedMemory 对象是否安全?提前感谢您的澄清。

https://docs.python.org/3/library/multiprocessing.shared_memory.html

【问题讨论】:

    标签: python python-3.x multiprocessing shared-memory


    【解决方案1】:

    The Array() class 应该类似于共享内存的同步版本,所以不,我希望不会。你会得到它所说的:一块没有同步开销的共享内存,当你不需要它或想要实现你自己的时候。

    【讨论】:

    • 您的回答更多的是猜测而不是对所提问题的回答,更多信息可能真的很有帮助。例如,您可以指向github.com/python/cpython/blob/3.9/Lib/multiprocessing/…,而不是猜测,并指出用于创建共享内存的方法是低级函数,并且在当前实现中,它看起来不像有任何围绕访问的同步原语共享内存
    • 不,这不是猜测,这就是实现的功能。
    • 您很可能是对的(请参阅我之前评论中的链接),但不是猜测的答案需要证明。证明可以是实现或文档的链接。例如:docs.python.org/3/library/queue.html#queue.Queue 如果只阅读类文档,似乎不会同步。但是,有人可能会指出编写此内容的主要模块描述:The Queue class in this module implements all the required locking semantics 以给出正确答案
    • 我明白了。我不是堆栈溢出的常规贡献者,这是一个随意的答案,但它是正确的。文档很清楚,我提到了提供锁定的类。
    • 我从来没有说过你的期望不可能是正确的。但是,如果您查看 SharedMemory(上一个链接)和 Array (github.com/python/cpython/blob/3.9/Lib/multiprocessing/…) 的实现,您会发现两者不共享相同的基数。这使您使用 Array 的解释无效。这就是为什么,我建议指向 SharedMemory 的实际实现来解释为什么 SharedMemory 上没有锁定。同样,文档中没有提到锁定是用户提出问题的原因,预计会有更多解释。
    猜你喜欢
    • 1970-01-01
    • 2021-09-28
    • 2015-10-31
    • 2015-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多