I’m implementing sequential solver calls in a benders loop.
It is possible to set the reslim option to limit the solution time of a single solver call.
It is also possible to measure the overall loop time by accumulating the solver time returned in resUsd using a scalar parameter.

Things become more complicated for me if the same setup is implemented using a Python ModelInstance (to avoid repeated model generation in the benders loop).
I simply don’t know what will be the ModelInstance property that would return the used time after a call to the solve() method (the Python docs are not so easy to read).

I also wonder if there is an option to set a global time limit for the whole model (not just for a solver call).

You can do time accounting independent of the resUsd (which relies in some way on the fact that the solver returns the correct time). Just do time stamps in GAMS:

scalar now, accTime 'in seconds' /0/;
now = jnow;
solve mymodel us ...;
accTime = accTime + (jnow-now)*60*60*24;
abort.noerror$(accTime>1000) 'stop after 1000 secs', accTime;

If you do now a solve or a modelinstance solve the time accounting is independent of this.

The resLim for the solve method of a GAMSModelInstance is determined when you generate the model instance (instantiate). It cannot be updated (only through a solver option file and the specific option, e.g. tilim in Cplex).

There is no option to stop a GAMS run after a given time limit.