我有一个函数def act(obs)
,它返回一个浮点值,计算成本很高(运行需要一些时间(。
import time
import random
def act(obs):
time.sleep(5) # mimic computation time
action = random.random()
return action
我经常在脚本中调用这个函数的速度比它执行所需的时间还要快。调用函数时,我不希望有任何等待时间。相反,我更喜欢使用早期计算的返回值。我该如何做到这一点?
我想到的是在函数中更新一个全局变量,我一直在阅读全局变量,尽管我不确定这是否是实现它的最佳方式
这是我最终基于这个答案使用的
class MyClass:
def __init__(self):
self.is_updating = False
self.result = -1
def _act(self, obs):
self.is_updating = True
time.sleep(5)
self.result = obs
self.is_updating = False
def act(self, obs):
if not self.is_updating:
threading.Thread(target=self._act, args=[obs]).start()
return self.result
agent = MyClass()
i = 0
while True:
agent.act(obs=i)
time.sleep(2)
print(i, agent.result)
i += 1
全局变量的方式应该有效。此外,您可以有一个具有私有成员的类,比如result
和一个标志isComputing
,以及一个方法getResult
,如果它当前没有计算,它将调用方法compute()
(通过线程(,并返回上一个结果。compute()
方法应该正确地更新标志isComputing
。