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

3 投票
2 回答
1359 浏览
提问于 2025-05-10 15:07
>>> 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() 之间有一些区别,比如后者在获取锁的时候支持超时设置。

撰写回答