David> +1 on the idea. I wonder if it makes sense to publish a David> mechanism to allow de-registering of callbacks, or if that's David> featuritis. While writing my message I thought, "I'll bet the first question asked will be about unregistering exit functions." I've been using the module I appended to my message unchanged for a couple years and never needed such functionality. I'm sure there are applications that could use it, but I think they'd be a small minority. Since the only defined interface is a single registration function (_run_exitfuncs is only used internally), I think you'd be free to add some unregister function protocol at a later time if it was deemed necessary. David> Also, I'd change: >> try: >> x = sys.exitfunc >> except AttributeError: >> sys.exitfunc = _run_exitfuncs >> del sys David> to: David> try: David> register_exitfuncs(sys.exitfunc) David> finally: David> sys.exitfunc = _run_exitfuncs David> Or some such. register_exitfunc is only meant to be called by clients of the module, not used internally. You're assuming that if something else was already bound to sys.exitfunc that it's not _run_exitfuncs. With your try/finally code try the following (mentally is fine): import exit def foo(): print 1 exit.register_exitfunc(foo) reload(exit) I think you'll see that exit._run_exitfuncs is on its own list of exit functions. That could be bad. The setup code: try: x = sys.exitfunc except AttributeError: sys.exitfunc = _run_exitfuncs is meant to avoid doing anything if any other module beat us to sys.exitfunc. Perhaps it should just be sys.exitfunc = _run_exitfuncs If someone fails to use the defined protocol, screw 'em... ;-) Skip
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4