python以追加方式打开文件 线程安全吗,Python的open函数文件读写线程不安全,logging模型文件读写线程安全!...
工作中遇到的問(wèn)題:如何在多線程的程序中同時(shí)記錄日志?
最初圖省事,使用了最原始的open函數(shù)來(lái)寫(xiě)日志,因?yàn)殚_(kāi)始使用的寫(xiě)文件模式的是追加('a'),發(fā)現(xiàn)并沒(méi)有線程不安全的現(xiàn)象,各個(gè)線程的的日志信息都寫(xiě)入到了日志文件中。
后來(lái)將寫(xiě)文件模式改成了只寫(xiě)默認(rèn)('w'),這時(shí)候線程不安全的問(wèn)題就顯露出來(lái)了,只有一個(gè)線程的日志信息被記錄。
這時(shí)候覺(jué)得不能再圖省事了,有必要把Python標(biāo)準(zhǔn)庫(kù)中專用日志模塊logging好好學(xué)習(xí)一下,果然不讓人失望,logging是線程安全的。無(wú)論是只寫(xiě)模式,還是追加模式,多線程的日志信息都正確的被記錄下來(lái)了。
以下是測(cè)試代碼:
def file_io(message,mode):
with open('log_test.log',mode) as f:
f.write(message)
f.write('\n')
def logging_io(message,mode):
logging.basicConfig(level='DEBUG',
filename='log_test1.log',
filemode=mode)
logging.info(message)
if __name__ == '__main__':
messages= ['---hello--', '----nihaojlj', '----world%%%%%%%%%%%%%%%%%%']
for m in messages:
th = threading.Thread(target=logging_io, args=(m,'a'))
th.start()
總結(jié):
多線程同時(shí)寫(xiě)文件的時(shí)候,追加模式('a')貌似并沒(méi)有線程不安全的現(xiàn)象
多線程記錄日志信息,還是使用標(biāo)準(zhǔn)庫(kù)的logging模塊吧,它線程安全!專業(yè)的事用專業(yè)的模塊!
總結(jié)
以上是生活随笔為你收集整理的python以追加方式打开文件 线程安全吗,Python的open函数文件读写线程不安全,logging模型文件读写线程安全!...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 任意两点最短路floyd算法matlab
- 下一篇: python标准词匹配_python匹配