import functools import threading from epics import get_pv as PV from log import log def toggle(func): @functools.wraps(func) def wrapper(value=None, pvname=None, **kwargs): fn = func.__name__ if not value: log.info(f"{fn}: ignoring value={repr(value)}") return func(value=value, pvname=pvname, **kwargs) pv = PV(pvname) call_later(pv.put, 0) log.info(f"{fn}: done") return wrapper def call_later(func, *args, **kwargs): threading.Thread(target=func, args=args, kwargs=kwargs).start()