工作中遇到的问题:如何在多线程的程序中同时记录日志?

最初图省事,使用了最原始的open函数来写日志,因为开始使用的写文件模式的是追加('a'),发现并没有线程不安全的现象,各个线程的的日志信息都写入到了日志文件中。

后来将写文件模式改成了只写默认('w'),这时候线程不安全的问题就显露出来了,只有一个线程的日志信息被记录。

这时候觉得不能再图省事了,有必要把Python标准库中专用日志模块logging好好学习一下,果然不让人失望,logging是线程安全的。无论是只写模式,还是追加模式,多线程的日志信息都正确的被记录下来了。

以下是测试代码:

 1 def file_io(message,mode):
 2     with open('log_test.log',mode) as f:
 3         f.write(message)
 4         f.write('\n')
 5
 6
 7 def logging_io(message,mode):
 8     logging.basicConfig(level='DEBUG',
 9                         filename='log_test1.log',
10                         filemode=mode)
11     logging.info(message)
12
13
14 if __name__ == '__main__':
15     messages= ['---hello--', '----nihaojlj', '----world%%%%%%%%%%%%%%%%%%']
16     for m in messages:
17         th = threading.Thread(target=logging_io, args=(m,'a'))
18         th.start()

总结:

  1. 多线程同时写文件的时候,追加模式('a')貌似并没有线程不安全的现象
  2. 多线程记录日志信息,还是使用标准库的logging模块吧,它线程安全!专业的事用专业的模块!

转载于:https://www.cnblogs.com/luckyboy314/p/10778868.html

Python的open函数文件读写线程不安全,logging模型文件读写线程安全!相关推荐

  1. python以追加方式打开文件 线程安全吗,Python的open函数文件读写线程不安全,logging模型文件读写线程安全!...

    工作中遇到的问题:如何在多线程的程序中同时记录日志? 最初图省事,使用了最原始的open函数来写日志,因为开始使用的写文件模式的是追加('a'),发现并没有线程不安全的现象,各个线程的的日志信息都写入 ...

  2. python加载模型文件进行图片分类_tensorflow通过模型文件,使用tensorboard查看其模型图Graph方式...

    Google提供了一个工具,TensorBoard,它能以图表的方式分析你在训练过程中汇总的各种数据,其中包括Graph结构. 所以我们可以简单的写几行Pyhton,加载Graph,只在logdir里 ...

  3. python调用自定义函数返回值的类型_生成dll文件以及python对DLL中函数的调用(参数类型以及返回值)...

    工具:VS2010    python2.7 (若使用的python是64位的,生成的dll也要使用x64) 系统:win7pro 64bit 首先,dll工程的创建以及dll文件的生成: new p ...

  4. OBJ模型文件的结构、导入与渲染

    在[3DS文件结构的初步认识]中提及了3DS格式模型文件.固然3DS格式很常用,但OBJ格式的模型也是很常见的,于是咔嚓了一下心,熟悉了一下格式,并写了一个导入OBJ格式模型的类,顺便有此文.--Zw ...

  5. java加载pmml模型文件报错_PMML总结与思考PMML模型生成和加载示例

    在机器学习用于产品的时候,我们经常会遇到跨平台的问题.比如我们用Python基于一系列的机器学习库训练了一个模型,但是有时候其他的产品和项目想把这个模型集成进去,但是这些产品很多只支持某些特定的生产环 ...

  6. 现代opengl 设计 3D模型文件导入显示

    利用3D模型导入库assimp, 可以读取很多种格式的3D模型文件,现在我们就用opengl 显示出来.而这需要一个桥,就是数据和opengl 显示,前文我们介绍了网格Mesh类,现在介绍model ...

  7. python读取数据的函数详解_你了解文件缓存机制吗?磁盘文件如何读写?Python中open函数详解...

    我们知道,在使用Python打开一个文件时,一般使用的是open()函数,但是你真正了解这个函数么?文件打开后如何进行缓存?对于大文件它是如何处理的?今天,小编带你来详细了解一下-- Python如何 ...

  8. python调用什么函数实现对文件内容的读取_如何使用python语言中的方法对文件进行读写操作...

    在我们使用python语言中的文件时,可以使用open()方法打开文件,close()方法关闭文件,read()方法读取文件内容,write()方法写入内容到文件中.下面利用几个实例说明文件读写方法, ...

  9. python中io.textio_Python文件读写概述(IO操作、文件读写、stringiobytesio、序列化),python,的,小,总结,StringIOBytesIO...

    IO操作 在进行文件的读写之前,需要说明几点.首先,运行的程序和读取的数据都会在内存中缓存. 进入到 程序或数据 内存 其次,用python程序进行文件的读写,需要创建一个小工具–文件流,用来处理数据 ...

最新文章

  1. hadoop使用mapreduce统计词频_深圳嘉华学校之Hadoop简介(什么是Map-Reduce-Mapreduce-about云开发)...
  2. 20145207 《Java程序设计》第4周学习总结
  3. 通过PowerShell查询本机IP地址
  4. JS之返回字符串最后出现的位置lastIndexOf
  5. amazeui学习笔记--css(基本样式4)--打印样式Print
  6. orac l e数据库第一章
  7. 可扩展的通用异常检测系统 EGADS
  8. 用C#实现将html文件转换为chm文件
  9. oracle恢复删除数据
  10. Elastic认证工程师到底有没有用?
  11. 51单片机单片机基础知识
  12. 修改FTP和MSTSC默认端口号
  13. 《德鲁克管理思想精要》读书笔记
  14. (1)Artemis简介
  15. Linux----生产者与消费者
  16. Vue全家桶之webpack详解(四)
  17. NB-IoT天线同轴电缆RG316、RG174、RG178
  18. 评估假设函数是否过拟合的方法
  19. 最近无聊做了一个新站玩玩(www.01zhc.cn)
  20. 计算机课堂如何落实知识点,浅议怎样组织计算机课堂教学原稿

热门文章

  1. 偷天换日——新型浏览器劫持木马“暗影鼠”分析
  2. Navicat Premium 数据库设计器和报表有什么作用
  3. Google Map App 问题集锦
  4. 从闲扯开始我的技术博客吧
  5. 使用vSphere Host Update Utility 4.0升级ESX 3到4.0版本
  6. Delphi 中的字符串函数(5) - SysUtils 中的 Ansi 字符串函数
  7. python实例(一)
  8. Navicat使用教程:使用Navicat Query Analyzer优化查询性能(第1部分)
  9. 【学时总结】 ◆学时 · I◆ A*算法
  10. 发现一篇超详细的ELK搭建