如何从同时执行的2个脚本中记录一个文件?

问题描述 投票:0回答:1

我是python的新手。我有一个包含许多功能的脚本。所以花了大约10秒才完成。为了提高速度,我将一个脚本分为两个(现在我有两个具有独立功能的脚本)独立脚本。我从另一个脚本导入一个脚本。所以它可以同时工作。但这样做会彻底改变记录器的行为。它假设在新的日志文件中创建和写入(每次我运行脚本)。但现在它也在以前的日志文件中写入。

所以我的猜测是我的记录器配置不能同时在两个脚本中工作。因为线程也运行缓慢。任何人都可以看看我的代码,并帮助我找到它的错误?

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

python multithreading python-3.x logging optimization
1个回答
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

© www.soinside.com 2019 - 2024. All rights reserved.