'Calls `fn` at the next signal message.
The callback function must take exactly one argument, which will be the
message triggering the signal.
Survives until signal is called or the MidiHub is destroyed.
Args:
fn: The callback function to call, passing in the triggering message.
signal: A MidiSignal to use as a signal to call `fn` on the triggering
message.'

@concurrency.serialized
def register_callback(self, fn, signal):

    self._callbacks[re.compile(str(signal))].append(fn)
