반응형
Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

CDW (Coding Discussion World)

python - JSON 파일 가공하여 DB에 넣기넣기 본문

Python/Do something

python - JSON 파일 가공하여 DB에 넣기넣기

pymin 2022. 5. 15. 22:09
반응형

어떤 서버에 접속해서 API Request로 정보(JSON 형식)를 긁어온다음에 다시 주기적으로(1분 등) DB에 넣고자 한다. curl을 통해서 Request를 날릴 예정인데 그냥 JSON 형식을 가공하는것만 봐도 좋을 듯 하다.

우선 curl로 request를 날리면 아래와 같이 response 가 온다고 가정한다. 복잡하다.. JSON 형식인데 어떤 형태인지 정리가 안된다. 이럴떄는 JSON 형식을 알아보기 쉽게 변환해보자. 변환할떄는 구글에 'JSON 형식 변환' 이런식으로 검색하면 많이 나온다.

우선 아래 링크를 통해서 변환하고자 한다.

http://json.parser.online.fr/

 

ㅇ 변환전은 아래처럼 복잡하다.

{"performances":[{"performance_metrics":[{"unit":"Bytes","name":"TRAFFIC_RX","data_type":"long","value":"5798","timestamp":"2021-04-17 01:09"},{"unit":"Bytes","name":"TRAFFIC_TX","data_type":"long","value":"1080","timestamp":"2021-04-17 01:09"},{"unit":"cps","name":"TRAFFIC_ERR_RX","data_type":"int","value":"0","timestamp":"2021-04-17 01:09"},{"unit":"Bytes","name":"TRAFFIC_ERR_TX","data_type":"long","value":"0","timestamp":"2021-04-17 01:09"}],"region_id":"SKTELECOM","source_type":"DOWNSTREAM","source_id":"0e6ee582-66a1-4a16-994e-22d04cc8e996","source_name":"MER01","datacenter_id":"HOST562c-e099-4a31-b692-63c6d7caf690"},{"performance_metrics":[{"unit":"Bytes","name":"TRAFFIC_RX","data_type":"long","value":"10890","timestamp":"2021-04-17 01:09"},{"unit":"Bytes","name":"TRAFFIC_TX","data_type":"long","value":"10984","timestamp":"2021-04-17 01:09"},{"unit":"cps","name":"TRAFFIC_ERR_RX","data_type":"int","value":"0","timestamp":"2021-04-17 01:09"},{"unit":"Bytes","name":"TRAFFIC_ERR_TX","data_type":"long","value":"0","timestamp":"2021-04-17 01:09"}],"region_id":"SKTELECOM","source_type":"EXTERNAL","source_id":"0e6ee582-66a1-4a16-994e-22d04cc8e996","source_name":"MER01","datacenter_id":"HOST562c-e099-4a31-b692-63c6d7caf690"},{"performance_metrics":[{"unit":"Bytes","name":"TRAFFIC_RX","data_type":"long","value":"39336","timestamp":"2021-04-17 01:09"},{"unit":"Bytes","name":"TRAFFIC_TX","data_type":"long","value":"22448","timestamp":"2021-04-17 01:09"},{"unit":"cps","name":"TRAFFIC_ERR_RX","data_type":"int","value":"0","timestamp":"2021-04-17 01:09"},{"unit":"Bytes","name":"TRAFFIC_ERR_TX","data_type":"long","value":"0","timestamp":"2021-04-17 01:09"}],"region_id":"SKTELECOM","source_type":"MECDATA","source_id":"0e6ee582-66a1-4a16-994e-22d04cc8e996","source_name":"MER01","datacenter_id":"HOST562c-e099-4a31-b692-63c6d7caf690"},{"performance_metrics":[{"unit":"Bytes","name":"TRAFFIC_RX","data_type":"long","value":"1958","timestamp":"2021-04-17 01:09"},{"unit":"Bytes","name":"TRAFFIC_TX","data_type":"long","value":"5280","timestamp":"2021-04-17 01:09"},{"unit":"cps","name":"TRAFFIC_ERR_RX","data_type":"int","value":"0","timestamp":"2021-04-17 01:09"},{"unit":"Bytes","name":"TRAFFIC_ERR_TX","data_type":"long","value":"0","timestamp":"2021-04-17 01:09"}],"region_id":"SKTELECOM","source_type":"DOWNSTREAM","source_id":"cf50edd8-d6c0-4b66-a02e-811cfa35cca0","source_name":"MER02","datacenter_id":"HOST562c-e099-4a31-b692-63c6d7caf690"},{"performance_metrics":[{"unit":"Bytes","name":"TRAFFIC_RX","data_type":"long","value":"724990","timestamp":"2021-04-17 01:09"},{"unit":"Bytes","name":"TRAFFIC_TX","data_type":"long","value":"249197","timestamp":"2021-04-17 01:09"},{"unit":"cps","name":"TRAFFIC_ERR_RX","data_type":"int","value":"0","timestamp":"2021-04-17 01:09"},{"unit":"Bytes","name":"TRAFFIC_ERR_TX","data_type":"long","value":"0","timestamp":"2021-04-17 01:09"}],"region_id":"SKTELECOM","source_type":"EXTERNAL","source_id":"cf50edd8-d6c0-4b66-a02e-811cfa35cca0","source_name":"MER02","datacenter_id":"HOST562c-e099-4a31-b692-63c6d7caf690"},{"performance_metrics":[{"unit":"Bytes","name":"TRAFFIC_RX","data_type":"long","value":"274676","timestamp":"2021-04-17 01:09"},{"unit":"Bytes","name":"TRAFFIC_TX","data_type":"long","value":"762516","timestamp":"2021-04-17 01:09"},{"unit":"cps","name":"TRAFFIC_ERR_RX","data_type":"int","value":"0","timestamp":"2021-04-17 01:09"},{"unit":"Bytes","name":"TRAFFIC_ERR_TX","data_type":"long","value":"0","timestamp":"2021-04-17 01:09"}],"region_id":"SKTELECOM","source_type":"MECDATA","source_id":"cf50edd8-d6c0-4b66-a02e-811cfa35cca0","source_name":"MER02","datacenter_id":"HOST562c-e099-4a31-b692-63c6d7caf690"}]}

 

사이트에 접속하면 네모 박스가 2개가 있는데 왼쪽에다가 붙여넣으면 오른쪽처럼 정리가 한번에 된다. +, - 버튼을 통해 더욱 간단하게 형태를 확인할 수 있다.

그럼 어떤 식으로 가공을 해야 할까? 우선 제일 먼저 파일 형태를 알아보고자 한다.

print(type())으로 조회해보면 파일 형태는 <class 'str'> string이다..

mep_router_response_2 = '''{"performances":[{"performance_metrics":[{"unit":"Bytes","name":"TRAFFIC_RX","data_type":"long","value":"5798","timestamp":"2021-04-17 01:09"},{"unit":"Bytes","name":"TRAFFIC_TX","data_type":"long","value":"1080","timestamp":"2021-04-17 01:09"},{"unit":"cps","name":"TRAFFIC_ERR_RX","data_type":"int","value":"0","timestamp":"2021-04-17 01:09"},{"unit":"Bytes","name":"TRAFFIC_ERR_TX","data_type":"long","value":"0","timestamp":"2021-04-17 01:09"}],"region_id":"SKTELECOM","source_type":"DOWNSTREAM","source_id":"0e6ee582-66a1-4a16-994e-22d04cc8e996","source_name":"MER01","datacenter_id":"HOST562c-e099-4a31-b692-63c6d7caf690"},{"performance_metrics":[{"unit":"Bytes","name":"TRAFFIC_RX","data_type":"long","value":"10890","timestamp":"2021-04-17 01:09"},{"unit":"Bytes","name":"TRAFFIC_TX","data_type":"long","value":"10984","timestamp":"2021-04-17 01:09"},{"unit":"cps","name":"TRAFFIC_ERR_RX","data_type":"int","value":"0","timestamp":"2021-04-17 01:09"},{"unit":"Bytes","name":"TRAFFIC_ERR_TX","data_type":"long","value":"0","timestamp":"2021-04-17 01:09"}],"region_id":"SKTELECOM","source_type":"EXTERNAL","source_id":"0e6ee582-66a1-4a16-994e-22d04cc8e996","source_name":"MER01","datacenter_id":"HOST562c-e099-4a31-b692-63c6d7caf690"},{"performance_metrics":[{"unit":"Bytes","name":"TRAFFIC_RX","data_type":"long","value":"39336","timestamp":"2021-04-17 01:09"},{"unit":"Bytes","name":"TRAFFIC_TX","data_type":"long","value":"22448","timestamp":"2021-04-17 01:09"},{"unit":"cps","name":"TRAFFIC_ERR_RX","data_type":"int","value":"0","timestamp":"2021-04-17 01:09"},{"unit":"Bytes","name":"TRAFFIC_ERR_TX","data_type":"long","value":"0","timestamp":"2021-04-17 01:09"}],"region_id":"SKTELECOM","source_type":"MECDATA","source_id":"0e6ee582-66a1-4a16-994e-22d04cc8e996","source_name":"MER01","datacenter_id":"HOST562c-e099-4a31-b692-63c6d7caf690"},{"performance_metrics":[{"unit":"Bytes","name":"TRAFFIC_RX","data_type":"long","value":"1958","timestamp":"2021-04-17 01:09"},{"unit":"Bytes","name":"TRAFFIC_TX","data_type":"long","value":"5280","timestamp":"2021-04-17 01:09"},{"unit":"cps","name":"TRAFFIC_ERR_RX","data_type":"int","value":"0","timestamp":"2021-04-17 01:09"},{"unit":"Bytes","name":"TRAFFIC_ERR_TX","data_type":"long","value":"0","timestamp":"2021-04-17 01:09"}],"region_id":"SKTELECOM","source_type":"DOWNSTREAM","source_id":"cf50edd8-d6c0-4b66-a02e-811cfa35cca0","source_name":"MER02","datacenter_id":"HOST562c-e099-4a31-b692-63c6d7caf690"},{"performance_metrics":[{"unit":"Bytes","name":"TRAFFIC_RX","data_type":"long","value":"724990","timestamp":"2021-04-17 01:09"},{"unit":"Bytes","name":"TRAFFIC_TX","data_type":"long","value":"249197","timestamp":"2021-04-17 01:09"},{"unit":"cps","name":"TRAFFIC_ERR_RX","data_type":"int","value":"0","timestamp":"2021-04-17 01:09"},{"unit":"Bytes","name":"TRAFFIC_ERR_TX","data_type":"long","value":"0","timestamp":"2021-04-17 01:09"}],"region_id":"SKTELECOM","source_type":"EXTERNAL","source_id":"cf50edd8-d6c0-4b66-a02e-811cfa35cca0","source_name":"MER02","datacenter_id":"HOST562c-e099-4a31-b692-63c6d7caf690"},{"performance_metrics":[{"unit":"Bytes","name":"TRAFFIC_RX","data_type":"long","value":"274676","timestamp":"2021-04-17 01:09"},{"unit":"Bytes","name":"TRAFFIC_TX","data_type":"long","value":"762516","timestamp":"2021-04-17 01:09"},{"unit":"cps","name":"TRAFFIC_ERR_RX","data_type":"int","value":"0","timestamp":"2021-04-17 01:09"},{"unit":"Bytes","name":"TRAFFIC_ERR_TX","data_type":"long","value":"0","timestamp":"2021-04-17 01:09"}],"region_id":"SKTELECOM","source_type":"MECDATA","source_id":"cf50edd8-d6c0-4b66-a02e-811cfa35cca0","source_name":"MER02","datacenter_id":"HOST562c-e099-4a31-b692-63c6d7caf690"}]}'''
 
mep_router_response_3 = json.loads(mep_router_response_2)
print(type(mep_router_response_2))

json 모듈을 import한다음에 json.loads로 변경해주면 파일 형태가 <class 'dict'>로 바뀐 것을 알 수 있다.

import json

mep_router_response_3 = json.loads(mep_router_response_2)
print(type(mep_router_response_3))

 

위의 사이트에서 변환했던 JSON 파일을 보면 "performances"라는 것이 안에 내용물을 감싸진 것을 확인할 수 있다. (사이트에서 +, - 를 눌러보면 쉽게 알 수 있다) 이에 따라, .get으로 performances를 제거하고 내용을 확인해보자. 내용을 보면 <class 'list'> 타입이 list로 변경됨을 알 수 있다.

st_rs = mep_router_response_3.get("performances")
print(type(st_rs))

 

이제 list에서 가장 처음 리스트만 뽑아보자. [0]을 이용..

st_rs = mep_router_response_3.get("performances")[0]
print(st_rs)

 

아래와 같이 많이 간단해졌다. type을 조회해보면 다시 <class 'dict'> dictionary로 변경.

{'performance_metrics': [{'unit': 'Bytes', 'name': 'TRAFFIC_RX', 'data_type': 'long', 'value': '5798', 'timestamp': '2021-04-17 01:09'}, {'unit': 'Bytes', 'name': 'TRAFFIC_TX', 'data_type': 'long', 'value': '1080', 'timestamp': '2021-04-17 01:09'}, {'unit': 'cps', 'name': 'TRAFFIC_ERR_RX', 'data_type': 'int', 'value': '0', 'timestamp': '2021-04-17 01:09'}, {'unit': 'Bytes', 'name': 'TRAFFIC_ERR_TX', 'data_type': 'long', 'value': '0', 'timestamp': '2021-04-17 01:09'}], 'region_id': 'SKTELECOM', 'source_type': 'DOWNSTREAM', 'source_id': '0e6ee582-66a1-4a16-994e-22d04cc8e996', 'source_name': 'MER01', 'datacenter_id': 'HOST562c-e099-4a31-b692-63c6d7caf690'}

 

그렇다면 다시 dictionary를 감싸고 있는 performance_metrics를 제거해보자.

다시 .get으로 performance_metrics를 선택해 보았다.

st_rs = mep_router_response_3.get("performances")[0].get("performance_metrics")
print(st_rs)

위에서와는 다르게 performance_metrics가 사라졌고 파일 형태가 다시 list로 변경되었다.

[{'unit': 'Bytes', 'name': 'TRAFFIC_RX', 'data_type': 'long', 'value': '5798', 'timestamp': '2021-04-17 01:09'}, {'unit': 'Bytes', 'name': 'TRAFFIC_TX', 'data_type': 'long', 'value': '1080', 'timestamp': '2021-04-17 01:09'}, {'unit': 'cps', 'name': 'TRAFFIC_ERR_RX', 'data_type': 'int', 'value': '0', 'timestamp': '2021-04-17 01:09'}, {'unit': 'Bytes', 'name': 'TRAFFIC_ERR_TX', 'data_type': 'long', 'value': '0', 'timestamp': '2021-04-17 01:09'}]

그럼 이제 여기서 첫번째 리스트만 확인하기 위해 [0]을 뒤에 붙여준다.

st_rs = mep_router_response_3.get("performances")[0].get("performance_metrics")[0]
print(st_rs)

 

결과는 아래와 같으면 다시 dictionary 파일이 되었다.

이제 여기서 원하는 값들을 추출해내면 된다.

{'unit': 'Bytes', 'name': 'TRAFFIC_RX', 'data_type': 'long', 'value': '5798', 'timestamp': '2021-04-17 01:09'}

 

우선은 timestamp를 보기로 한다.

st_rs = mep_router_response_3.get("performances")[0].get("performance_metrics")[0].get("timestamp")
print(st_rs)

시간값만 출려됨을 확인할 수 있다.

2021-04-17 01:09

 

이제 다른값들도 출력해보자. 아래처럼 3가지 형태를 조회해본다.

st_rs = mep_router_response_3.get("performances")[0].get("performance_metrics")[0].get("timestamp")
st_rs1 = mep_router_response_3.get("performances")[0].get("performance_metrics")[0].get("name")
st_rs2 = mep_router_response_3.get("performances")[0].get("performance_metrics")[0].get("value")
print(st_rs)
print(st_rs1)
print(st_rs2)

3가지 형태가 나온 것을 확인해보자.

2021-04-17 01:09
TRAFFIC_RX
5798

 

이제 DB에 넣는것을 고려해서 각 결과값들을 1줄로 만들고 ','로 구분해보자.

st_rs = mep_router_response_3.get("performances")[0].get("performance_metrics")[0].get("timestamp") + ',' + mep_router_response_3.get("performances")[0].get("performance_metrics")[0].get("name")+ ',' + mep_router_response_3.get("performances")[0].get("performance_metrics")[0].get("value")
print(st_rs)

 

아래처럼 결과값이 한줄에 나오고 ','로 구분됨을 확인할 수 있다.

2021-04-17 01:09,TRAFFIC_RX,5798

 

지금부터가 중요하다. 아까 JSON 파일이 엄청나게 복잡했는데 어떻게 하면 단순한 방법으로 해당 내용을 다 표현해줄 수 있을까? 아래 코드대로 하면 되는데 한번 결과부터 확인해보고 내용을 보자.

mep_router_response_3 = json.loads(mep_router_response_2)
st_rs = mep_router_response_3.get("performances")
for st_rs_result in range(6):
    for pf_count in range(4):
        test = st_rs[st_rs_result].get("performance_metrics")[0].get("timestamp")+','+st_rs[st_rs_result].get("source_name")+','+st_rs[st_rs_result].get("source_type")+','+st_rs[st_rs_result].get("performance_metrics")[pf_count].get("name")+','+st_rs[st_rs_result].get("performance_metrics")[pf_count].get("value")
        print(test)

 

실행시 아래처럼 복잡한 JSON 파일에 있던 내용이 깔끔하게 정리되는 것을 확인할 수 있다.

2021-04-17 01:09,MER01,DOWNSTREAM,TRAFFIC_RX,5798
2021-04-17 01:09,MER01,DOWNSTREAM,TRAFFIC_TX,1080
2021-04-17 01:09,MER01,DOWNSTREAM,TRAFFIC_ERR_RX,0
2021-04-17 01:09,MER01,DOWNSTREAM,TRAFFIC_ERR_TX,0
2021-04-17 01:09,MER01,EXTERNAL,TRAFFIC_RX,10890
2021-04-17 01:09,MER01,EXTERNAL,TRAFFIC_TX,10984
2021-04-17 01:09,MER01,EXTERNAL,TRAFFIC_ERR_RX,0
2021-04-17 01:09,MER01,EXTERNAL,TRAFFIC_ERR_TX,0
2021-04-17 01:09,MER01,MECDATA,TRAFFIC_RX,39336
2021-04-17 01:09,MER01,MECDATA,TRAFFIC_TX,22448
2021-04-17 01:09,MER01,MECDATA,TRAFFIC_ERR_RX,0
2021-04-17 01:09,MER01,MECDATA,TRAFFIC_ERR_TX,0
2021-04-17 01:09,MER02,DOWNSTREAM,TRAFFIC_RX,1958
2021-04-17 01:09,MER02,DOWNSTREAM,TRAFFIC_TX,5280
2021-04-17 01:09,MER02,DOWNSTREAM,TRAFFIC_ERR_RX,0
2021-04-17 01:09,MER02,DOWNSTREAM,TRAFFIC_ERR_TX,0
2021-04-17 01:09,MER02,EXTERNAL,TRAFFIC_RX,724990
2021-04-17 01:09,MER02,EXTERNAL,TRAFFIC_TX,249197
2021-04-17 01:09,MER02,EXTERNAL,TRAFFIC_ERR_RX,0
2021-04-17 01:09,MER02,EXTERNAL,TRAFFIC_ERR_TX,0
2021-04-17 01:09,MER02,MECDATA,TRAFFIC_RX,274676
2021-04-17 01:09,MER02,MECDATA,TRAFFIC_TX,762516
2021-04-17 01:09,MER02,MECDATA,TRAFFIC_ERR_RX,0
2021-04-17 01:09,MER02,MECDATA,TRAFFIC_ERR_TX,0

다시 코드로 돌아와서 보면..

처음 사이트에서 JSON 파일을 변환했을 때 +, - 등이 있었고, 거기서 어떤 형태로 되어 있는지 확인할 수 있었다.

형태를 보면 큰 그룹이 6개였고, 안에 작은 그룹이 4개였다. (직접 해보면 제일 이해하기가 쉬움)

안에의 형태가 list였기 때문에 큰 그룹은 [0], [1]... [5] 까지 하나하나 선택하면 되고, 작은 그룹은 [0], [1], [2], [3]까지 총 4개를 선택하면 된다. 이제 for문을 2개 돌리면 큰그룹 6개를 확인하고, 작은 그룹 4개를 각가 확인해서 총 24(6X4)줄의 결과물을 확인할 수 있게 된다. (궁금한게 있으면 댓글이나 쪽지 주세요.)

mep_router_response_3 = json.loads(mep_router_response_2)
st_rs = mep_router_response_3.get("performances")
for st_rs_result in range(6):
    for pf_count in range(4):
        test = st_rs[st_rs_result].get("performance_metrics")[0].get("timestamp")+','+st_rs[st_rs_result].get("source_name")+','+st_rs[st_rs_result].get("source_type")+','+st_rs[st_rs_result].get("performance_metrics")[pf_count].get("name")+','+st_rs[st_rs_result].get("performance_metrics")[pf_count].get("value")
        print(test)

 

그럼 이제 샘플 데이터를 가지고 어떻게 가공할지는 전부 정리가 되었다.

다만, 아까 처음에 curl을 가지고 정보를 조회한다 그랬는데.. curl로 현재시간을 기준으로 1~2분 전의 시간값을 조회하고 싶다면 어떻게 하면 될까?

datetime 함수를 이용해서 현재 시간을 구하고, 현재 시간을 기준으로 +, - 시간값을 계산할 수 있다.

from datetime import datetime
from datetime import timedelta
    nowtime = datetime.now()
    nowtime_5ms_before = nowtime - timedelta(minutes=0.5)
    nowtime_1s_before = nowtime - timedelta(minutes=1.5)
    mep_router_request1 = 'curl -X GET "http://127.0.0.1?btime=' + nowtime_1s_before.strftime("%Y%m%d%H%M") + '00' + '&etime=' + nowtime_5ms_before.strftime("%Y%m%d%H%M") + '00"' + ' -H "Accept: */*" -H "Content-Type: application/json" -H "Host: 127.0.0.1"

 

nowtime = datetime.now() 을 이용해서 현재시간을 정의한다. 이후 timedelta를 이용해서 내가 원하는 시간값 (과거 또는 미래)를 미리 설정해둘 수 있다.

nowtime_5ms_before = nowtime - timedelta(minutes=0.5) >> 30초 전

nowtime_5ms_before = nowtime - timedelta(minutes=1.5) >> 1분 30초 전

nowtime_5ms_before = nowtime + timedelta(minutes=5) >> 5분 후

이후에.. 나는 시간 출력을 YYYYmmddHHMM00 형태로 출력하고 싶기 때문에 .strftime을 추가해주고 MM까지만 작성한 후 '00'은 별도로 붙여주었다. SS까지 넣으면 초단위까지만 출력되지만 나는 현재 시간을 기준으로 분단위까지만 확인한 후 curl 을 날리고 싶었기 떄문에 분단위까지만 확인하고 나머지는 강제로 00을 집어 넣어서 분단위로 curl을 날릴 수 있었다.

마지막으로 현재 시간을 기준으로 1분마다 같은 동작을 수행해야 하기 때문에 이전에 만든 코드를 meprouter_schedule()이라는 함수로 만든 후에 1분마다 수행되도록 schedule.every(1).minutes.do을 사용하였다. (시간값을 바꾸고 싶으면 괄호의 숫자를 바꾸거나 second 등 원하는 기준값으로 설정하면 된다.)

 

처음에는 time.sleep(1) 으로 간단하게 하려 했으나.. 그러면 시간이 조금씩 밀릴 것 같아서 (결국 가끔가다가 통계값이 하나씩 빠지겠지..) schedule을 사용했다.

schedule.every(1).minutes.do(meprouter_schedule)
while True:
    schedule.run_pending()
    time.sleep(1)

 

이렇게 작성을 하니 1분마다 통계가 잘 돌아간다. 이제 DB에 넣는 함수를 추가하면 1분만다 request하고 받아온 결과값을 가공해서 저장한 후 DB에 넣을수가 있다.( DB에 넣는법은 이전 mysql DB에 data 넣기를 참조)

**계속 스크립트를 수행하다 보니 한 가지 문제점이 생겼다. 가끔식 서버에 data가 없어 response를 주지 않는 것이다. data가 없어 response를 주기 않는 것은 정상인데.. 그럴때마다 오류가 나면서 파이썬이 꺼진다. 후우.. 어떻게 해야할까 고민하다가 급한 마음에 thread를 생각했다. (더 좋은 방법이 있으면 공유점 부탁해요..)

 

module management하는 함수를 추가했고, 이 module management 함수는 thread를 이용해서 이전에 만든 통계 스케줄러를 작동시키고 module management함수 자체는 매 1분마다 수행되도록 했다.

def module_management():
    runclient_thread = threading.Thread(target=meprouter_schedule)
    runclient_thread.start()
schedule.every(1).minutes.do(module_management)

while True:
    schedule.run_pending()
    time.sleep(1)

 

이렇게 되면 기존과의 차이점이 뭘까? 기존에는 response에 파일이 없어 에러가 나면 파이썬이 꺼졌지만, module management가 thread를 돌리기 때문에 파일이 없어 에러가 나더라도 파이썬 자체가 꺼지지는 않고, 다음 1분이 지나면 다시 module management함수가 동작하면서 다음 시간의 통계값을 수집하게 된다.

오늘의 내용은 이만 마치도록 한다.

사실 기본적인 내용들을 자세하게 수록하고, 코딩을 하면서 생각했던 모든 내용들 또한 글에 담고 싶지만 생각보다 쉽지가 않다. 뭔가를 짜다보면 정신없이 만들게 되고.. 다 완성된 후에야 '아 블로그' 라고 생각하고 최종 결과물을 기반으로 블로그를 작성하게 된다. 뭐 생각했던 내용들을 다 작성할 수는 있지만 time 이 더욱 많이 필요해진다. 다음번에는 무조건 처음부터 블로그를 신경 써가면서 고민해 봐야겠다..

+나중에는 그동안 나왔던 모듈 등에 대해 하나하나 자세하게 다뤄야겠다.

모두 즐거운 밤 되세요^^

반응형