簡體   English   中英

我可以在 with 語句中獲取多處理的 Lock 嗎?

[英]Can I acquire multiprocessing's Lock in a with statement?

如果一個進程無法解鎖multiprocessing進程鎖,就會發生可怕的事情。 為了盡量減少發生這種情況的機會,我想在with塊中獲取鎖。 有什么內置的方法可以做到這一點,還是我需要自己動手?

是的,你可以這樣做:

mylock = multiprocessing.Lock()

with mylock:
    ...

因為 Lock 是一個上下文管理器。 RLock 以及來自線程的 Lock 和 RLock 也是如此。

文檔確實聲明它是“threading.Lock 的克隆”,因此您可以參考“在 with 語句中使用鎖、條件和信號量”

[編輯 2020: 文檔現在明確提到了這一點]

是的你可以。

Lock的文檔指出:

class multiprocessing.Lock

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

閱讀threading的文檔:

該模塊提供的所有具有acquire()release()方法的對象都可以用作with語句的上下文管理器。

是的。 文件現在明確指出:

Lock支持上下文管理器協議,因此可以在with語句中使用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM