首先python的日志模块是线程安全的,但是不是进程安全的,但是多线程的python对于提升性能来说并没有什么用处,所以就会有个挺奇葩的问题,那就是写程序记录日志时出现错乱。
这个问题我看了很多帖子,很多种解决办法,但是说实话都比较麻烦,这里提供一种比较简单但是也比较奇葩的解决办法:
把日志模块写成函数。
比如:
def start_log(strPQL):
logger = logging.getLogger()
logger.setLevel(logging.INFO)
ch = logging.StreamHandler()
ch.setLevel(logging.INFO)
rq = time.strftime('%Y%m%d%H%M', time.localtime(time.time()))
print os.getcwd()
log_path = os.getcwd() + '\\Logs\\'
if not os.path.exists(log_path):
os.mkdir(log_path)
log_name = log_path + rq + strPQL + '.log'
logfile = log_name
fh = logging.FileHandler(logfile, mode='w+')
fh.setLevel(logging.DEBUG)
formatter = logging.Formatter("%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s")
fh.setFormatter(formatter)
ch.setFormatter(formatter)
logger.addHandler(ch)
logger.addHandler(fh)
return logger
进入进程中再调用这个函数,然后传入一个字符串,主要是区分这个日志文件的,每个进程最好传入不同的字符串。
这样的话每个进程都有自己独立的logger模块,每个logger模块都有自己独立的日志文件,彼此都是独立,自然不用担心异步的问题。