@defer.inlineCallbacks
    def fire(self, *args, **kwargs):

        def do(observer):
            def eb(failure):
                logger.warning(
                    "%s signal observer %s failed: %r",
                    self.name, observer, failure,
                    exc_info=(
                        failure.type,
                        failure.value,
                        failure.getTracebackObject()))
                if not self.suppress_failures:
                    return failure

            return defer.maybeDeferred(observer, *args, **kwargs).addErrback(eb)

        with PreserveLoggingContext():
            deferreds = [
                do(observer)
                for observer in self.observers
            ]

            res = yield defer.gatherResults(
                deferreds, consumeErrors=True
            ).addErrback(unwrapFirstError)

        defer.returnValue(res)
Invokes every callable in the observer list, passing in the args and
dataset/ETHPy150Open matrix-org/synapse/synapse/util/distributor.py/Signal.fire