更新变量的Python异步调用



我有一个函数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

相关内容

  • 没有找到相关文章

最新更新