【发布时间】:2012-11-12 12:50:11
【问题描述】:
我有一个应用程序,它以给定的时间间隔循环遍历项目列表(然后这个列表的长度会有所不同),它对每个项目执行一个相当简单的操作,它不仅仅是添加一个值,也不是一些真正复杂的计算.
我想知道的是我应该像这样锁定每个项目(当前解决方案):
def method_1:
for item in the_list:
do_operation(item);
def do_operation(item):
lock()
//do some stuff.
unlock()
或者我应该这样做:
def method_1:
lock()
for item in the_list:
do_operation(item);
unlock()
def do_operation(item):
//do some stuff.
我想这实际上很难回答,因为我认为这在很大程度上取决于“做一些事情”是什么以及需要多长时间。老实说,我不知道这需要多少时间。特别是与 python 获取锁所需的时间相比。
如果我能以某种方式改进我的问题,请在 cmets 中告诉我。
【问题讨论】:
-
开销往往相对较高。因此,我倾向于支持后一种选择。尤其是在这种情况下,循环中没有实质性部分不属于关键部分。另一方面,如果
do_operation在其他地方使用,并且应该始终受到保护,那么在函数内部执行锁定是有意义的。 -
如果你不使用线程,那么没有,没有必要。您的代码中有注释建议您需要使用它。
-
许多锁支持上下文管理器协议 (
with lock: do stuff)。这在异常情况下很有帮助(替代方案是try:/finally:子句)。
标签: python concurrency locking