为什么Python多进程管理器会产生线程锁?
>>> import multiprocessing
>>> multiprocessing.Manager().Lock()
<thread.lock object at 0x7f64f7736290>
>>> type(multiprocessing.Lock())
<class 'multiprocessing.synchronize.Lock'>
为什么一个管理器产生的对象是 thread.lock
而不是 multiprocessing.synchronize.Lock
,这不是我们从 multiprocessing
对象中预期的吗?
相关文章:
- 暂无相关问题
2 个回答
0
这确实不是预期的结果,因为文档上明确说明了Lock()
的功能。
它会创建一个共享的
threading.Lock
对象,并返回这个对象的代理。
至于为什么它返回的是一个threading.Lock而不是multiprocessing对象,这个问题我很遗憾无法回答。
3
管理对象总是充当代理;管理者的目标是将不支持多进程的对象变成支持多进程的对象。
对于 multiprocessing.Lock()
对象来说,这样做是没有意义的;因为这些对象是通过 信号量 实现的,完全可以在多进程中使用,不需要额外的帮助。
而 threading.Lock
就不支持多进程;threading.Lock()
对象和 multiprocessing.Lock()
之间有一些区别,比如后者在获取锁的时候支持超时设置。