在多进程程序中,我想根据参数锁定某些函数,例如
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的文件,并在锁定发布时将其删除。
答案 0 :(得分:2)
为什么不给每个电子表格Lock
作为实例属性?
class Spreadsheet(...):
def __init__(self, ...):
self.lock = multiprocessing.Lock()
...
然后
def calculate(spreadsheet):
with spreadsheet.lock:
...
答案 1 :(得分:2)
您可以使用this recipe改进简单文件打开,我已在Linux和Windows上测试过。