12

如果进程无法解锁multiprocessing锁,可能会发生可怕的事情。为了尽量减少发生这种情况的机会,我想在一个with块中获取锁。有什么内置的方法可以做到这一点,还是我需要自己动手?

4

3 回答 3

15

是的,你可以这样做:

with multiprocessing.Lock():
    ...

因为 Lock 是一个上下文管理器。RLock 以及来自线程的 Lock 和 RLock 也是如此。

文档确实声明它是“threading.Lock的克隆”,因此您可以参考“在 with 语句中使用锁、条件和信号量”

[编辑 2020:文档现在明确提到了这一点]

于 2013-08-22T17:05:53.197 回答
6

是的你可以。

状态的文档Lock

class multiprocessing.Lock

A non-recursive lock object: a clone of `threading.Lock`.

阅读threading的文档:

该模块提供的所有具有acquire()release()方法的对象都可以用作with 语句的上下文管理器。

于 2013-08-22T17:06:16.723 回答
1

是的。该文件现在明确指出:

Lock支持上下文管理器协议,因此可以在with语句中使用。

于 2019-12-18T22:33:18.083 回答