为什么 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()
对象之间存在一些差异;后者在获取锁时支持超时,例如。
>>> 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()
对象之间存在一些差异;后者在获取锁时支持超时,例如。