      return self.p.getParamPath(key_bytes).decode("utf-8")
  
    def all_keys(self):
      return self.p.allKeys()
 
</s> remove   def put_nonblocking(self, key, dat):
    cdef string k = self.check_key(key)
    cdef string dat_bytes = ensure_bytes(dat)
    with nogil:
      self.p.putNonBlocking(k, dat_bytes)

  def put_bool_nonblocking(self, key, bool val):
    cdef string k = self.check_key(key)
    with nogil:
      self.p.putBoolNonBlocking(k, val)

 </s> add  </s> remove   params = Params()

 </s> add  </s> remove from openpilot.common.params import Params, ParamKeyType, UnknownKeyName
 </s> add from openpilot.common.params import Params, ParamKeyType, UnknownKeyName, put_nonblocking, put_bool_nonblocking </s> remove       params.put_bool_nonblocking("IsRhdDetected", driver_status.wheel_on_right)
 </s> add       put_bool_nonblocking("IsRhdDetected", driver_status.wheel_on_right) </s> remove     Use the put_nonblocking, put_bool_nonblocking in time sensitive code, but
 </s> add     Use the put_nonblocking helper function in time sensitive code, but
def put_nonblocking(key, val, d=""):
  threading.Thread(target=lambda: Params(d).put(key, val)).start()

def put_bool_nonblocking(key, bool val, d=""):
  threading.Thread(target=lambda: Params(d).put_bool(key, val)).start()
      return self.p.getParamPath(key_bytes).decode("utf-8")
  
    def all_keys(self):
      return self.p.allKeys()
def put_nonblocking(key, val, d=""):
  threading.Thread(target=lambda: Params(d).put(key, val)).start()

def put_bool_nonblocking(key, bool val, d=""):
  threading.Thread(target=lambda: Params(d).put_bool(key, val)).start()
keep keep keep add
 Revert "params: safe and efficient async writing parameters (#25912)"

This reverts commit 0d797f4e8b2552192669d0329c14849f0a970066. 
common/params_pyx.pyx