【发布时间】:2011-04-10 06:09:01
【问题描述】:
在多进程程序中,我想根据参数锁定某些函数,例如
def calculate(spreadsheet):
_do_calc(spreadsheet)
现在我要做的是基于电子表格,锁定功能,以便可以同时处理多个电子表格,但同一电子表格上的两个调用将锁定例如
def calculate(spreadsheet):
with Lock(spreadsheet.id):
_do_calc(spreadsheet)
是否可以使用 multiprocessing.Lock ,如果不是,还有什么替代方案?我正在考虑使用基于 fcntl 的文件锁定。
编辑: 上面是我的问题的一个非常简化的版本,基本上我没有使用多处理模块,我有 N 个不同的脚本可以处理一些数据,有时我想避免相同的数据,所以想在某些时候同步它们,例如他们都可以导入一个模块 mylock 并使用 mylock.lock 来同步
import mylock
def calculate(spreadsheet):
with mylock.lock(spreadsheet.id):
_do_calc(spreadsheet)
我可以通过哪些方式编写 mylock.lock,目前我只是创建一个名为 spreadsheet.id 的文件,并在锁定释放时将其删除。
【问题讨论】:
-
使用ilock,您可以使用命名系统范围的锁