多进程条件/命名锁

时间:2010-09-09 13:01:37

标签: python locking mutex

在多进程程序中,我想根据参数锁定某些函数,例如

def calculate(spreadsheet):
    _do_calc(spreadsheet)

现在我要做的是基于电子表格,锁定功能,以便可以同时处理多个电子表格,但同一电子表格上的两个调用将锁定,例如。

def calculate(spreadsheet):
    with Lock(spreadsheet.id):
      _do_calc(spreadsheet)

是否可以进行多处理。锁定,如果没有替代方案的话?我正在考虑使用基于fcntl的文件锁定。

修改: 上面是我的问题的一个非常简化的版本,基本上我没有使用多处理模块,我有N个不同的脚本,它们处理一些数据,有时我想避免使用相同的数据,所以想要在某些点同步它们,例如所有这些都可以导入模块mylock并使用mylock.lock来同步

import mylock

def calculate(spreadsheet):
    with mylock.lock(spreadsheet.id):
      _do_calc(spreadsheet)

我可以用多种方式编写mylock.lock,目前我只是创建一个名为spreadsheet.id的文件,并在锁定发布时将其删除。

2 个答案:

答案 0 :(得分:2)

为什么不给每个电子表格Lock作为实例属性?

class Spreadsheet(...):
    def __init__(self, ...):
        self.lock = multiprocessing.Lock()

    ...

然后

def calculate(spreadsheet):
    with spreadsheet.lock:
        ...

答案 1 :(得分:2)

您可以使用this recipe改进简单文件打开,我已在Linux和Windows上测试过。