Failures and Retries
When you call a function over a sequence of inputs with
errors can happen during function execution. Exceptions from within the remote
function are propagated to the caller, so you can handle them with a
try-except statement (refer to
section on custom types
for more on how to catch user-defined exceptions):
def f(i): raise ValueError() if __name__ == "__main__": with stub.run(): try: for _ in f.map([1, 2, 3]): pass except ValueError: print("Exception handled")
You can configure Modal to automatically retry function failures, if you set the
retries option when declaring your function:
def my_flaky_function(): pass
When used with
Function.map(), each input is retried up to the max number of
The basic configuration shown provides a fixed 1s delay between retry attempts.
For fine-grained control over retry delays, including exponential backoff
In the case of a container crash on start-up (for example, while handling imports in global scope before the function can be run), the error will be propagated to the caller immediately, since it’s likely a user error.
If a container crashes after start-up (for example, due to an out of memory error), Modal will reschedule the container and any work it was currently assigned, unless the crash rate of the container exceeds a certain limit.