python3:multiprocessing.Lock()也锁定在线程级别?

时间:2017-11-12 21:59:37

标签: python-3.x python-multiprocessing python-multithreading

我最近在python3程序中从threading切换到multiprocessing。这似乎工作得很好,multiprocessing.Lock()调用似乎确实成功,因为它应该在我从程序中产生的多个执行线程中。

但是,我的程序本身是从另一个高阶模块调用的,该模块通过普通的Python线程运行我的程序的单独实例。我没有能力重写该模块的代码。

我以前使用threading.Lock()threading.RLock()来管理此环境中的共享代码,我想知道multiprocessing.Lock()是否与threading.Lock()或{{{{}}相同1}}在同一进程的不同线程中调用它时。

或者我是否必须实施某种混合锁定机制,以确保我的共享资源在我的组合threading.RLock() - 和 - multiprocessing环境中都是安全的?

如果需要混合动力车,以下是否足够? ...

threading

...或者我是否必须实现更复杂的东西,可能是通过我必须编写的新锁定上下文管理器?

提前谢谢。

1 个答案:

答案 0 :(得分:0)

我终于找到了问题的答案: Safe to call multiprocessing from a thread in Python?

我现在看到在线程环境中调用multiprocessing.Lock()将不起作用。我之前在这里发布了一些创建混合multiprocessing/threading锁定对象的代码,但我现在已经删除了该代码,因为它不正确。