私はC言語で書かれた基礎となるライブラリ(libidb
と呼ぶ)を使用するKafkaストリームから読み込む単純なPythonスクリプトを実行しています。この流れから連続的に。Python - サードパーティのモジュールでキャッチされたSIGTERMをトラップしてスクリプトに伝播する方法
特定のデバッグ目的のために、スクリプトが終了するときに辞書をJSON形式でダンプする必要があります。私はsignal
モジュールを使用してSIGINT
とSIGTERM
をスクリプトからトラップし、これらのシグナルを呼び出して出力をダンプする関数を定義しました。しかし、問題は私のスクリプトは、私が参照していたライブラリを使用して(読み取り/書き込みの)ほとんどの時間を費やして、信号を捕まえることになります。ではなく、がスクリプトに伝播しました。その結果、私のシグナルハンドラはここでは使用されません。捕捉されたシグナルがインタプリタに伝播され、対応するシグナルハンドラが呼び出されるようにするにはどうすればよいですか。
idb
は、標準のPythonパッケージでは利用できない内部モジュールです。
import signal
import json
import idb
def dump_dict_to_JSON():
__location__ = os.path.realpath(os.path.join(os.getcwd(), os.path.dirname(__file__)))
f = open(os.path.join(__location__, 'dict_map'), 'w');
f.write(json.dumps(my_dict))
f.close()
def idb_handler():
print('I can do whatever with the message from stream')
if __name__ == "__main__":
signal.signal(signal.SIGTERM, dump_dict_to_JSON)
signal.signal(signal.SIGINT, dump_dict_to_JSON)
db_consumer = idb.AsyncConsumer(istream, idb_handler)
私は、カーネル内の信号ごとに1つだけのシグナルハンドラがありCentOSに7