'Publish a CommandStartedEvent to all command listeners.
:Parameters:
- `command`: The command document.
- `database_name`: The name of the database this command was run
against.
- `request_id`: The request id for this operation.
- `connection_id`: The address (host, port) of the server this
command was sent to.
- `op_id`: The (optional) operation id for this operation.'

def publish_command_start(self, command, database_name, request_id, connection_id, op_id=None):

    if (op_id is None):
        op_id = request_id
    event = CommandStartedEvent(command, database_name, request_id, connection_id, op_id)
    for subscriber in self.__command_listeners:
        try:
            subscriber.started(event)
        except Exception:
            _handle_exception()
