Skip to content

Macro to timeout operations that take too long #282

Description

@pw0908

Hi!

On my Genie app, there are some cases where, if the user inputs unphysical conditions, the solvers will get stuck / take a long time to output an unreasonable result. As such, it would be great to have some sort of macro that will only allow a task to only run for a certain amount of time. There was an example here: https://discourse.julialang.org/t/simple-timeout-of-function/99578/3

The macro they propose looks like this:

macro timeout(seconds, expr_to_run, expr_when_fails="Timed out")
    quote
        tsk = @task $(esc(expr_to_run))
        schedule(tsk)
        Timer($(esc(seconds))) do timer
            istaskdone(tsk) || Base.throwto(tsk, InterruptException())
        end
        try
            fetch(tsk)
        catch _
            $(esc(expr_when_fails))
        end
    end
end

However, I've found that this macro doesn't work for my cases. Here is an MWE (you'll need to install Clapeyron):

using Clapeyron

model = PCSAFT(["water", "carbon dioxide"])

@time bubble_pressure(model,298.15,[0.9,0.1])
# After first compilation, this should take about 0.8s

@timeout 0.01 bubble_pressure(model,298.15,[0.9,0.1])
# Doesn't timeout

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions