Python多线程同步---文件读写控制方法


Posted in Python onFebruary 12, 2019

1、实现文件读写的文件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以内追加进去
 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()

得到结果:

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!

文件写入结果:

Python多线程同步---文件读写控制方法

以上结果可以看出,不加锁多线程读写文件会出现错误。

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、创建一个锁
def lock_test():
 #time.sleep(0.1) 
 if mu.acquire(True): #2、获取锁状态,一个线程有锁时,别的线程只能在外面等着
  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()

结果:

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!

文件写入结果:

Python多线程同步---文件读写控制方法

以上这篇Python多线程同步---文件读写控制方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python中声明只包含一个元素的元组数据方法
Aug 25 Python
Django查询数据库的性能优化示例代码
Sep 24 Python
Python入门之三角函数atan2()函数详解
Nov 08 Python
python查询mysql,返回json的实例
Mar 26 Python
windows下安装Python的XlsxWriter模块方法
May 03 Python
Opencv+Python 色彩通道拆分及合并的示例
Dec 08 Python
Python 3.8新特征之asyncio REPL
May 28 Python
PYQT5设置textEdit自动滚屏的方法
Jun 14 Python
Python中six模块基础用法
Dec 08 Python
Python loguru日志库之高效输出控制台日志和日志记录
Mar 07 Python
Django Admin设置应用程序及模型顺序方法详解
Apr 01 Python
通过代码实例了解Python异常本质
Sep 16 Python
Python 按字典dict的键排序,并取出相应的键值放于list中的实例
Feb 12 #Python
Python 互换字典的键值对实例
Feb 12 #Python
Python根据成绩分析系统浅析
Feb 11 #Python
Python实现的在特定目录下导入模块功能分析
Feb 11 #Python
Python正则表达式和re库知识点总结
Feb 11 #Python
Python实现的大数据分析操作系统日志功能示例
Feb 11 #Python
Python实现对特定列表进行从小到大排序操作示例
Feb 11 #Python
You might like
php部分常见问题总结
2008/03/27 PHP
php 分页原理详解
2009/08/21 PHP
php实现parent调用父类的构造方法与被覆写的方法
2015/02/11 PHP
YII2框架中excel表格导出的方法详解
2017/07/21 PHP
PHP实现财务审核通过后返现金额到客户的功能
2019/07/04 PHP
php模拟实现斗地主发牌
2020/04/22 PHP
firefox中用javascript实现鼠标位置的定位
2007/06/17 Javascript
如何将一个String和多个String值进行比较思路分析
2013/04/22 Javascript
jquery.cookie用法详细解析
2013/12/18 Javascript
JavaScript基础教程之alert弹出提示框实例
2014/10/16 Javascript
用js编写的简单的计算器代码程序
2015/08/04 Javascript
text-align:justify实现文本两端对齐 兼容IE
2015/08/19 Javascript
js验证真实姓名与身份证号是否匹配
2015/10/13 Javascript
详解Next.js页面渲染的优化方案
2019/01/27 Javascript
Vue CL3 配置路径别名详解
2019/05/30 Javascript
vue集成chart.js的实现方法
2019/08/20 Javascript
微信小程序实现电子签名功能
2020/07/29 Javascript
[05:56]第十六期——新进3大C之小兔基
2014/06/24 DOTA
[01:34]DAC2018主赛事第四日五佳镜头 Gh巨牙海民助Miracle-死里逃生
2018/04/07 DOTA
Python使用matplotlib实现的图像读取、切割裁剪功能示例
2018/04/28 Python
Python对数据进行插值和下采样的方法
2018/07/03 Python
pycharm 2018 激活码及破解补丁激活方式
2020/09/21 Python
Python的Django框架实现数据库查询(不返回QuerySet的方法)
2020/05/19 Python
Python如何把十进制数转换成ip地址
2020/05/25 Python
植村秀美国官网:Shu Uemura美国
2019/03/19 全球购物
美国Jeep配件购物网站:Morris 4×4 Center
2019/05/01 全球购物
英国户外装备商店:Ultimate Outdoors
2019/05/07 全球购物
枚举和一组预处理的#define有什么不同
2016/09/21 面试题
介绍一下ICMP(Internet Control Message Protocol)Internet控制信息协议
2016/11/26 面试题
个人贷款承诺书
2014/03/28 职场文书
教师个人成长总结
2015/02/11 职场文书
2015年学校德育工作总结
2015/04/22 职场文书
2015年家长学校工作总结
2015/04/22 职场文书
论语读书笔记
2015/06/26 职场文书
HTML+css盒子模型案例(圆,半圆等)“border-radius” 简单易上手
2021/05/10 HTML / CSS
把77A收信机改造成收音机
2022/04/05 无线电