Designing a cancellable function

Giovanni Bajo noway at ask.me
Sat Dec 16 05:38:40 EST 2006


Gabriel Genellina wrote:

>> I now would also like to add the possibility to allow the user to
>> *cancel* the execution of foo() during the processing, and I am
>> wondering what the best / most Pythonic way to design this is.
> 
> I can't say if this is the "best/more Pythonic way", but a simple way 
> would be to use the return value from your callback. Consider it an 
> "abort" function: if it returns True, cancel execution; as long as it 
> returns False, keep going.

It's even easier if the callback function simply raise an exception, which can 
be caught from the outside:


class AbortOperationError(RuntimeError):
    pass


def callback(N):
    updateProgressBar(N)
    processGUIEvents()
    if exit_button_pressed:
       raise AbortOperationError()


try:
    longFunction(callback)
except AbortOperationError()
    pass


def longFunction(callback):
    for i in xrange(1000000000):
        # do something
        callback(i / 1000000000.0)


-- 
Giovanni Bajo



More information about the Python-list mailing list