【发布时间】:2017-10-23 11:09:17
【问题描述】:
我有一个函数,其中包含负责访问加载在全局变量中的资源的关键块/代码段。我想锁定这个关键代码块,因为我的函数会同时执行多次。
我要避免的是资源从第一个函数调用和第二个函数获取此结果的数据中生成一些结果,因为资源需要一些时间来执行。
global_var = SomeMachineLearningModel
def famousFunction():
# some initializations here
# here also
critical_results = global_var.use() # May take few seconds to complete
# some critical_results manipulation
return manipulated_results
在函数内锁定critical_results是一个好的解决方案还是锁定整个函数体?
没有使用线程,我希望这个 global_variable 一次由一个函数调用访问,或者可能是整个函数。
我不确定要使用哪种锁定方法。
谢谢!!
编辑: 当第一个函数调用正在等待模型(机器学习模型)产生结果并且第二个函数调用也在等待并且当第一个结果到达时它被错误的函数调用消耗时,就会发生竞争条件。
【问题讨论】:
-
您的意思是要缓存
global_var.use()在函数调用之间返回的内容吗? -
“没有使用线程”请解释...如果是这种情况,我能想到的唯一问题是递归函数多次调用这个全局变量(这将只是如果你锁定它会导致死锁)
-
@DuncanWP 如果第一次调用 FamousFunction() 应该生成 10,第二次调用应该生成 20,我希望第一次调用的答案是 10,而不是第二个函数可能同时执行。因为这个 global_var.use() 对两者都是全局可用的。 (是从文件目录加载的机器学习模型)
-
您需要解释“同时”部分。如果您的应用程序不是多线程的,那么您是否有多个进程正在运行?
-
如果你没有多个线程或多个进程,你的任何代码都不可能乱序执行。
标签: python multithreading machine-learning locking global-variables