2017-12-12 21 views
0

나는 python에서 새롭다. 많은 기능을 가진 하나의 스크립트가 있습니다. 그래서 끝내기까지 약 10 초가 걸렸습니다. 속도를 향상시키기 위해 필자는 하나의 스크립트를 두 개로 나눴습니다 (이제 독립 기능을 가진 두 개의 스크립트가 있습니다). 다른 스크립트를 가져 오는 중입니다. 그래서 동시에 작동 할 수 있습니다. 하지만 이렇게하면 로거의 동작이 완전히 변경됩니다. 새 로그 파일을 작성하고 작성하는 것으로 가정합니다 (스크립트를 실행할 때마다). 하지만 지금은 이전 로그 파일에도 쓰고 있습니다.동시에 실행되는 2 개의 스크립트에서 하나의 파일에 로그인하는 방법은 무엇입니까?

내 생각에 로거 구성이 두 스크립트에서 동시에 작동하지 않습니다. 왜냐하면 그 스레딩은 또한 느리게 실행되기 때문입니다. 누구든지 내 코드를 확인하고 실수를 찾을 수 있도록 도와주세요. ??

script_1.py 
script_path = os.path.dirname(os.path.realpath(sys.argv[0]))   
dat = str(datetime.datetime.now().strftime('%Y_%m_%d_%H_%M_%S')) 
logger = logging.getLogger("main_script") 
logger.setLevel(logging.INFO) 
fh = logging.FileHandler(script_path + '\\..\\main_script_' + dat".log") 
logger_file_path = script_path + '\\..\\main_script_' + dat + ".log" 
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') 
fh.setFormatter(formatter) 
logger.addHandler(fh) 

def CloseLogger(): 
    """CloseLogger function closes the logger """  
    handler = logger.handlers[:] 
    for i in handler: 
     i.flush() 
     i.close() 
     logger.removeHandler(i) 

#other independent functions 
if__name__== "__main__": 
    main_1() 

script_2.py 
from threading import Thread 
from script_1 import * 
run_script1 = Thread(target = main_1) 
run_script1.start() 
logger = logging.getLogger('main_script.script_2') # second part of original script 



#other independent functions 

if__name__== "__main__": 
    run_script2 = Thread(target = main_2) 
    run_script2.start() 
    run_script2.join() 
    run_script2.join() 

나는 스레딩 또는 로거 구성에서 실수를 저지르고 있다고 생각합니다. 실수를 찾아 내도록 도와주세요. 자세한 정보가 필요하면 알려주십시오. 내가 원인을 찾은 것 같아 당신에게

enter image description here

+0

설명을 위해, 새 파일 대신 이전 파일에 쓰고 있다고합니다. 변수'dat'을 기반으로하면, 현재 시간이 아닌 이전 시간을 얻고 있다는 뜻입니까? –

+0

nop, 나는 그렇게 생각하지 않는다. 왜냐하면 내가 모든 스크립트를 하나의 스크립트에 넣었을 때 내 기존 스크립트에서 완벽하게 작동했기 때문이다. –

+0

script_1을 완벽하게 가져 오는 이유는 무엇입니까? 모듈이나 스크립트를 두 가지 방식으로 가져올 수 있기 때문입니다. 1) 가져 오기 모듈 이름 2) 모듈에서 가져 오기 * –

답변

0

감사합니다. 로거를 제대로 닫아야합니다. 로거를 닫기위한 코드가 ...

handlers = logger.handlers[:] #close logger 
for handler in handlers: 
    handler.flush() 
    handler.close() 
    logger.removeHandler(handler) # was not removing handler 
logging.shutdown() 

내가 잘못하면 저를 교정하십시오. @ Treyten Carey 고마워요.