/
computer_proxy.py
38 lines (29 loc) · 1.07 KB
/
computer_proxy.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
from functools import wraps
def compute_once(fun):
@wraps(fun)
def wrapper(*args, **kwargs):
self = args[0]
key = fun.__name__, args # add support for kwargs
if key not in self.buffered_vals:
self.buffered_vals[key] = fun(*args, **kwargs)
return self.buffered_vals[key]
return wrapper
def once_a_frame(fun):
@wraps(fun)
def wrapper(*args, **kwargs):
self = args[0]
key = fun.__name__, args # add support for kwargs
if key not in self.buffered_vals_frm:
self.buffered_vals_frm[key] = fun(*args, **kwargs)
return self.buffered_vals_frm[key]
return wrapper
class ComputerProxy:
def __init__(self):
self.eng.attach_obs(self.on_start_frame)
# there are issues if the object has another on_start_frame
self.buffered_vals, self.buffered_vals_frm = {}, {}
def on_start_frame(self):
self.buffered_vals_frm = {}
def destroy(self):
self.eng.detach_obs(self.on_start_frame)
self.buffered_vals = self.buffered_vals_frm = None