python多線程同步之文件讀寫控制
本文實(shí)例為大家分享了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á)到讀寫效果。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- python之json文件讀寫操作的四種方法
- Python文本與二進(jìn)制文件讀寫操作指南
- 使用Python實(shí)現(xiàn)異步文件讀寫功能
- Python文件讀寫操作基礎(chǔ)知識(shí)和實(shí)戰(zhàn)應(yīng)用
- Python文件讀寫open函數(shù)詳解
- python文件讀寫操作小結(jié)
- 使用Python文件讀寫,自定義分隔符(custom delimiter)
- Python打開(kāi)文件、文件讀寫操作、with方式、文件常用函數(shù)實(shí)例分析
- 專家解析Python文件讀寫的理論與實(shí)踐(從基礎(chǔ)概念到工程應(yīng)用)
相關(guān)文章
python數(shù)據(jù)類型_元組、字典常用操作方法(介紹)
下面小編就為大家?guī)?lái)一篇python數(shù)據(jù)類型_元組、字典常用操作方法(介紹)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-05-05
Python 用__new__方法實(shí)現(xiàn)單例的操作
這篇文章主要介紹了Python 用__new__方法實(shí)現(xiàn)單例的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-12-12
教你一步步利用python實(shí)現(xiàn)貪吃蛇游戲
這篇文章主要給大家介紹了關(guān)于如何利用python實(shí)現(xiàn)貪吃蛇游戲的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-06-06
pytorch中的numel函數(shù)用法說(shuō)明
這篇文章主要介紹了pytorch中的numel函數(shù)用法說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-05-05
基于Python實(shí)現(xiàn)一個(gè)專業(yè)的密碼強(qiáng)度檢測(cè)器
這篇文章主要為大家詳細(xì)介紹了基于Python實(shí)現(xiàn)一個(gè)專業(yè)的密碼強(qiáng)度檢測(cè)器,可以用于評(píng)估密碼的安全性和強(qiáng)度,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2025-12-12
Python中DataFrame轉(zhuǎn)列表的最全指南
在Python數(shù)據(jù)分析中,Pandas的DataFrame是最常用的數(shù)據(jù)結(jié)構(gòu)之一,本文將為你詳解5種主流DataFrame轉(zhuǎn)換為列表的方法,大家可以根據(jù)需求進(jìn)行選擇2025-03-03
Python辦公自動(dòng)化之?dāng)?shù)據(jù)預(yù)處理和數(shù)據(jù)校驗(yàn)詳解
這篇文章主要為大家詳細(xì)介紹了Python辦公自動(dòng)化中數(shù)據(jù)預(yù)處理和數(shù)據(jù)校驗(yàn)的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以參考一下2024-01-01

