您好,登錄后才能下訂單哦!
這篇文章主要為大家展示了“python多線程同步之文件讀寫控制的示例分析”,內(nèi)容簡(jiǎn)而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“python多線程同步之文件讀寫控制的示例分析”這篇文章吧。
具體內(nèi)容如下
1、實(shí)現(xiàn)文件讀寫的文件ltz_schedule_times.py
#! /usr/bin/env python #coding=utf-8 import os def ReadTimes(): res = [] if os.path.exists('schedule_times.txt'): fp = open('schedule_times.txt', 'r') else: os.system('touch schedule_times.txt') fp = open('schedule_times.txt', 'r') try: line = fp.read() if line == None or len(line)==0: fp.close() return 0 tmp = line.split() print 'tmp: ', tmp schedule_times = int(tmp[-1]) finally: fp.close() #print schedule_times return schedule_times def WriteTimes(schedule_times): if schedule_times <= 10: fp = open('schedule_times.txt', 'a+')#10以內(nèi)追加進(jìn)去 else: fp = open('schedule_times.txt', 'w')#10以外重新寫入 schedule_times = 1 print 'write schedule_times start!' try: fp.write(str(schedule_times)+'\n') finally: fp.close() print 'write schedule_times finish!' if __name__ == '__main__': schedule_times = ReadTimes() #if schedule_times > 10: # schedule_times = 0 print schedule_times schedule_times = schedule_times + 1 WriteTimes(schedule_times)
2.1、不加鎖對(duì)文件進(jìn)行多線程讀寫。file_lock.py
#! /usr/bin/env python #coding=utf-8 from threading import Thread import threading import time from ltz_schedule_times import * #1、不加鎖 def lock_test(): time.sleep(0.1) schedule_times = ReadTimes() print schedule_times schedule_times = schedule_times + 1 WriteTimes(schedule_times) if __name__ == '__main__': for i in range(5): Thread(target = lock_test, args=()).start()
得到結(jié)果:
0 write schedule_times start! write schedule_times finish! tmp: tmp: tmp: tmp: [[[['1''1''1''1']]]] 11 1 1 write schedule_times start!write schedule_times start! write schedule_times start!write schedule_times start! write schedule_times finish! write schedule_times finish! write schedule_times finish!write schedule_times finish!
文件寫入結(jié)果:
以上結(jié)果可以看出,不加鎖多線程讀寫文件會(huì)出現(xiàn)錯(cuò)誤。
2.2、加鎖對(duì)文件進(jìn)行多線程讀寫。file_lock.py
#! /usr/bin/env python #coding=utf-8 from threading import Thread import threading import time from ltz_schedule_times import * #2、加鎖 mu = threading.Lock() #1、創(chuàng)建一個(gè)鎖 def lock_test(): #time.sleep(0.1) if mu.acquire(True): #2、獲取鎖狀態(tài),一個(gè)線程有鎖時(shí),別的線程只能在外面等著 schedule_times = ReadTimes() print schedule_times schedule_times = schedule_times + 1 WriteTimes(schedule_times) mu.release() #3、釋放鎖 if __name__ == '__main__': for i in range(5): Thread(target = lock_test, args=()).start()
結(jié)果:
0 write schedule_times start! write schedule_times finish! tmp: ['1'] 1 write schedule_times start! write schedule_times finish! tmp: ['1', '2'] 2 write schedule_times start! write schedule_times finish! tmp: ['1', '2', '3'] 3 write schedule_times start! write schedule_times finish! tmp: ['1', '2', '3', '4'] 4 write schedule_times start! write schedule_times finish!
文件寫入結(jié)果:
達(dá)到讀寫效果。
以上是“python多線程同步之文件讀寫控制的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。