Python多線程同步---文件讀寫控制方法
1、實現(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)追加進去 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、不加鎖對文件進行多線程讀寫。
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é)果可以看出,不加鎖多線程讀寫文件會出現(xiàn)錯誤。
2.2、加鎖對文件進行多線程讀寫。
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)建一個鎖 def lock_test(): #time.sleep(0.1) if mu.acquire(True): #2、獲取鎖狀態(tài),一個線程有鎖時,別的線程只能在外面等著 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é)果:
以上這篇Python多線程同步---文件讀寫控制方法就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
在 Windows 下搭建高效的 django 開發(fā)環(huán)境的詳細教程
這篇文章主要介紹了如何在 Windows 下搭建高效的 django 開發(fā)環(huán)境,本文通過一篇詳細教程實例代碼相結(jié)合給大家講解的非常詳細,對大家的學(xué)習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-07-07在linux系統(tǒng)下安裝python librtmp包的實現(xiàn)方法
今天小編就為大家分享一篇在linux系統(tǒng)下安裝python librtmp包的實現(xiàn)方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-07-07Django代碼性能優(yōu)化與Pycharm Profile使用詳解
本文通過一個簡單的實例一步一步引導(dǎo)讀者對其進行全方位的性能優(yōu)化,這篇文章主要給大家介紹了關(guān)于Django代碼性能優(yōu)化與Pycharm Profile使用的相關(guān)資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下2018-08-08