Break execution after a given time

Hi,

I am optimization a function choosing different parameters. However, for some parameters, it will loop forever. So I want to set a timer like following: (just an example)

function optim(theta)
    if run time of function x(theta) > 1min
         return inf 
   else return x(theta)
end

Thanks!
Ethan

(please quote your code)

Query the time with time_ns(), save it, then compare.

It seems like you will need to do this within the function itself - otherwise how will you interrupt it? (Maybe some kind of threading?)

I’ve done something like this before in an extremely hacky way, which I’ll describe below. I would wager good money there’s something better with tasks and threads and I’d be excited to learn it.

  1. Set up a channel, but don’t put anything in it. The function you’ll interrupt needs to take a channel as an argument.
  2. Modify your function code so that it periodically checks if the channel has a value; if so, the function immediately returns.
  3. Create two tasks: one to execute the function, and one to sleep for a minute before adding a value to the channel.

That way, after ~1 minute the channel will have a value, and the next time the long-running function checks the channel, it’ll immediately return.

2 Likes

this actually doesn’t sound too bad…and it also have the plus side that, you can first don’t push anything into the channel, and then manually interrupt it — I guess it combines check time_ns() and just have a new REPL running.

that sounds doable. I will try. Thx!