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