C로 작성된 기본 라이브러리 (libidb
)를 사용하는 Kafka 스트림에서 읽는 간단한 Python 스크립트가 실행됩니다. 스크립트는 이 흐름에서 계속적으로.Python - 제 3 자 모듈에 의해 잡힌 SIGTERM을 잡아주고 스크립트에 전파하는 방법
특정 디버그 목적으로 스크립트가 종료되면 사전을 JSON 형식으로 덤프해야합니다. 나는 모듈을 사용하여 SIGINT
, SIGTERM
을 스크립트에서 트랩하고 출력을 덤프하기 위해이 신호를 호출하는 함수를 정의했습니다. 그러나 문제는 내 스크립트가 대부분의 시간을 내가 읽었던 라이브러리를 사용하여 (읽기/쓰기 용으로) 신호를 잡는 데 걸리는데, 이는 이 아니고이 스크립트에 전파 된 것입니다. 결과적으로 내 시그널 핸들러는 여기에서 사용되지 않습니다. 잡힌 신호가 인터프리터에 전달되었는지 확인한 다음 해당 신호 처리기가 호출되는지 확인합니다.
idb
은 표준 Python 패키지에서 사용할 수없는 내부 모듈입니다. 내가 CentOS의 7 Python 2.7.5
을 사용하고
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)
는