python logging多线程出错

heiyeah09 2014-08-05 10:56:58
我的问题和:http://bbs.csdn.net/topics/390497486 的问题差不多
我用python的logging写了两个日志E(执行日志),S(脚本日志),E中会定时发送alive消息,一旦将alive信息写入到E中时,E和S的日志就会串,而且后面S中的信息都会重复多次写,越来越多!继续执行后框中会报RuntimerError:cannot release un-aquired lock,最后报IOError:[Errno 24] Too many open files: (S或E的日志路径),哪位python神知道怎么回事么?

E和S调用了同一个方法写日志,通过一个参数区分不同的日志路径,alive消息(单独一个线程)也用同一个方法定时写日志,本来alive期望只写到E中,现在却也会写到S中!
...全文
411 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
heiyeah09 2014-08-07
  • 打赏
  • 举报
回复
引用 4 楼 angel_su 的回复:
感觉代码有问题,应该是针对不同日志对象,在一开始就配置好,不应该中途反复增删操作函数...
仔细想了一下,应该是最开始配置好各日志对象!
heiyeah09 2014-08-06
  • 打赏
  • 举报
回复
lock.acquire() log.addhandler(fh) log.info(msg) del log.handlers[i] #循环删除所有的handler lock.release()
heiyeah09 2014-08-06
  • 打赏
  • 举报
回复
引用 1 楼 angel_su 的回复:
上点代码瞧瞧,估计配置上有问题...
后来查看了一下,是logger的filehandler未清空,两个线程同时调用写日志函数时,会先后调用addhandler, 导致logger中有多个handler,同一个内容就会重复写,写日志函数中加个锁就可以了!
angel_su 2014-08-06
  • 打赏
  • 举报
回复
上点代码瞧瞧,估计配置上有问题...
angel_su 2014-08-06
  • 打赏
  • 举报
回复
感觉代码有问题,应该是针对不同日志对象,在一开始就配置好,不应该中途反复增删操作函数...

37,719

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧