私のコードでは、次のような関数があります。
def myfunc():
# Don't do anything if there's an instance already
if get_var('running') == 'true':
return
set_var('running', 'true')
# In case things go wrong
atexit.register(set_var, 'running', 'false')
do_something()
do_something_else()
set_var('running', 'false')
# Unregister handler because nothing bad happened
atexit.unregister(set_var)
set_var
データベースに含まれる変数を設定します。
これらすべての の目的はset_var
、複数のインスタンスが同時に実行されるのを防ぐことです。
atexit
ハンドラーは、プログラムが中断されている場合は正常に機能しますCtrl-Cが、システムなどによって強制終了された場合は機能しません。
私は知ってsignal
いますが、ハンドラーをキャンセルすることはできません。
それ、どうやったら出来るの?または、同じ機能を実現するために構造をどのように変更できますか?