python3:multiprocessing.Lock() 是否也在线程级别锁定?
python3: does multiprocessing.Lock() also lock at the thread level?
我最近在我的 python3 程序中从 threading
切换到 multiprocessing
。这似乎工作正常,并且 multiprocessing.Lock()
调用似乎确实成功地工作,因为它应该在我从我的程序中产生的多个执行线程中进行。
但是,我的程序本身是从另一个高阶模块调用的,该模块通过普通 Python 线程运行我的程序的单独实例。我没有能力重写那个模块的代码。
我以前使用 threading.Lock()
和 threading.RLock()
来管理此环境中的共享代码,我想知道 multiprocessing.Lock()
是否会与 threading.Lock()
或threading.RLock()
在同一进程的不同线程中调用时。
或者我是否必须实施某种混合锁定机制以确保我的共享资源在我的组合multiprocessing
-和-threading
环境中都是安全的?
如果需要混合动力车,以下是否足够? ...
with multiprocessing.Lock():
with threading.Lock(): # threading.RLock() in some cases
# code that I want to protect
...或者我是否必须实现更复杂的东西,也许是通过我必须编写的新锁定上下文管理器?
提前致谢。
我终于找到了问题的答案:
我现在发现从线程环境中调用 multiprocessing.Lock()
是行不通的。我之前在这里发布了一些创建混合 multiprocessing/threading
锁对象的代码,但我现在删除了该代码,因为它不正确。
我最近在我的 python3 程序中从 threading
切换到 multiprocessing
。这似乎工作正常,并且 multiprocessing.Lock()
调用似乎确实成功地工作,因为它应该在我从我的程序中产生的多个执行线程中进行。
但是,我的程序本身是从另一个高阶模块调用的,该模块通过普通 Python 线程运行我的程序的单独实例。我没有能力重写那个模块的代码。
我以前使用 threading.Lock()
和 threading.RLock()
来管理此环境中的共享代码,我想知道 multiprocessing.Lock()
是否会与 threading.Lock()
或threading.RLock()
在同一进程的不同线程中调用时。
或者我是否必须实施某种混合锁定机制以确保我的共享资源在我的组合multiprocessing
-和-threading
环境中都是安全的?
如果需要混合动力车,以下是否足够? ...
with multiprocessing.Lock():
with threading.Lock(): # threading.RLock() in some cases
# code that I want to protect
...或者我是否必须实现更复杂的东西,也许是通过我必须编写的新锁定上下文管理器?
提前致谢。
我终于找到了问题的答案:
我现在发现从线程环境中调用 multiprocessing.Lock()
是行不通的。我之前在这里发布了一些创建混合 multiprocessing/threading
锁对象的代码,但我现在删除了该代码,因为它不正确。