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)追加進(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、不加鎖對文件進(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é)果可以看出,不加鎖多線程讀寫文件會出現(xiàn)錯誤。
2.2、加鎖對文件進(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)建一個鎖 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)境的詳細(xì)教程
這篇文章主要介紹了如何在 Windows 下搭建高效的 django 開發(fā)環(huán)境,本文通過一篇詳細(xì)教程實例代碼相結(jié)合給大家講解的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-07-07
在linux系統(tǒng)下安裝python librtmp包的實現(xiàn)方法
今天小編就為大家分享一篇在linux系統(tǒng)下安裝python librtmp包的實現(xiàn)方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-07-07
Django代碼性能優(yōu)化與Pycharm Profile使用詳解
本文通過一個簡單的實例一步一步引導(dǎo)讀者對其進(jìn)行全方位的性能優(yōu)化,這篇文章主要給大家介紹了關(guān)于Django代碼性能優(yōu)化與Pycharm Profile使用的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2018-08-08

