def readAsync(self, fileName, callback, **kwargs):
        """
        Interprets the specified file asynchronously, interpreting it as a
        model or a script file. As a side effect, it invalidates all entities
        (as the passed file can contain any arbitrary command); the lists of
        entities will be re-populated lazily (at first access).

        Args:
            fileName: Path to the file (Relative to the current working
            directory or absolute).

            callback: Callback to be executed when the file has been
            interpreted.
        """
        if self._langext is not None:
            with open(fileName, 'r') as fin:
                newmodel = self._langext.translate(fin.read(), **kwargs)
                with open(fileName+'.translated', 'w') as fout:
                    fout.write(newmodel)
                    fileName += '.translated'

        def async_call():
            self._lock.acquire()
            try:
                self._impl.read(fileName)
                self._errorhandler_wrapper.check()
            except Exception:
                self._lock.release()
                raise
            else:
                self._lock.release()
                callback.run()
        Thread(target=async_call).start()