The wxPython wiki actually has a page on dealing with long running tasks called from event handlers called (surprise surprise): http://wiki.wxpython.org/LongRunningTasks
Hint: the second to last example on that page has the clearest example - using a worker thread object to do your DoEfficiency() function. I also don't think you want to disable so many event handlers, do you? Nothing will respond to inputs as long as that process is running (assuming you aren't running it in another thread.) -- http://mail.python.org/mailman/listinfo/python-list