human
I wrote the below code

    @decorator.decorator
    def _synchronized(f, *a, **k):
        call_args = inspect.getcallargs(f, *a, **k)
        call_args['f_name'] = f.__name__
        lock = coordinator.get_lock(lock_name.format(**call_args))
        t1 = timeutils.now()
        t2 = None
        try:
            with lock(blocking):
                t2 = timeutils.now()
                LOG.debug('Lock    "%(name)s"    acquired    by    "%(function)s"    ::    waited    %(wait_secs)0.3fs', {'name': lock.name, 'function': f.__name__, 'wait_secs': (t2 - t1)})
                return f(*a, **k)
        finally:
            t3 = timeutils.now()
            if (t2 is None):
                held_secs = 'N/A'
            else:
                held_secs = ('%0.3fs' % (t3 - t2))
            LOG.debug('Lock    "%(name)s"    released    by    "%(function)s"    ::    held    %(held_secs)s', {'name': lock.name, 'function': f.__name__, 'held_secs': held_secs})
    return _synchronized

What's a good function header?

Here's a good function header?
assistant
#Here's a good function header.

def synchronized(lock_name, blocking=True, coordinator=COORDINATOR):