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

时间:2015-11-19 09:42:06

标签: python multithreading python-multithreading python-multiprocessing locks

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

为什么生成的对象是thread.lock而不是multiprocessing.synchronize.Lock,因为它可能来自multiprocessing对象?

2 个答案:

答案 0 :(得分:2)

托管对象始终是代理;管理器的目标是使非多处理感知对象能够识别多处理。

threading.Lock个对象执行此操作毫无意义;这些是使用semaphores实现的,并且在没有帮助的情况下完全支持多处理。

另一方面,

threading.Lock()不能识别多处理; multiprocessing.Lock()个对象与babel-node之间存在一些差异;例如,后者在获取锁时支持超时。

答案 1 :(得分:0)

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

  

创建一个共享的threading.Lock对象并为其返回一个代理。

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