def file_add(self, ev, paths):
        """
        Register for file change events.  If there is a change to the file, all
        registered tasks will be notified with a call t.event(action).

        Note that as multiple tasks might register an event on the same
        path, each path is mapped to a dict of tasks pointing at actions.
        A task can only register a single action with each path.
    """
        log = self._params.get('log', self._discard)
        if not isinstance(paths, list):
            paths = [paths]
        for path in paths:
            if path not in self._file_event_map:
                self._watch_files.add(path)
                self._file_event_map[path] = {}
            self._file_event_map[path][ev.get_key()] = ev
        log.debug("Added event key %r, action %r to path%s: %s", ev.get_key(), ev._handler_name, ses(len(paths)), paths)
Register for file change events.  If there is a change to the file, all
        registered tasks will be notified with a call t.event(action).

        Note that as multiple tasks might register an event on the same
        path, each path is mapped to a dict of tasks pointing at actions.
        A task can only register a single action with each path.