为什么 python 多进程管理器产生线程锁?

Why python multiprocessing manager produce threading locks?

>>> import multiprocessing
>>> multiprocessing.Manager().Lock()
<thread.lock object at 0x7f64f7736290>
>>> type(multiprocessing.Lock())
<class 'multiprocessing.synchronize.Lock'>

为什么经理生成的对象是 thread.lock,而不是 multiprocessing 对象所期望的 multiprocessing.synchronize.Lock

肯定不是预期的,因为documentation明确指出Lock()

Create a shared threading.Lock object and return a proxy for it.

至于为什么它returns一个threading.Lock而不是多处理对象是一个不同的故事,很遗憾我无法回答。

托管对象始终是代理;管理器的目标是使非多处理感知对象成为多处理感知对象。

multiprocessing.Lock() 个对象执行此操作没有意义;这些是使用 semaphores 实现的,并且无需帮助即可完全进行多处理。

另一方面,

threading.Lock 不支持多处理; threading.Lock() 对象和 multiprocessing.Lock() 对象之间存在一些差异;后者在获取锁时支持超时,例如。