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编写爬虫小程序
May 14 Python
一步步解析Python斗牛游戏的概率
Feb 12 Python
Python selenium 父子、兄弟、相邻节点定位方式详解
Sep 15 Python
Python向Excel中插入图片的简单实现方法
Apr 24 Python
ERLANG和PYTHON互通实现过程详解
Jul 05 Python
Pytorch修改ResNet模型全连接层进行直接训练实例
Sep 10 Python
基于python+selenium的二次封装的实现
Jan 06 Python
Pytorch 神经网络—自定义数据集上实现教程
Jan 07 Python
python GUI库图形界面开发之PyQt5浏览器控件QWebEngineView详细使用方法
Feb 26 Python
浅谈keras2 predict和fit_generator的坑
Jun 17 Python
Pycharm2020最新激活码|永久激活(附最新激活码和插件的详细教程)
Sep 29 Python
python 实现图片批量压缩的示例
Dec 18 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使用curl发送json格式数据实例
2013/12/17 PHP
Yii框架实现多数据库配置和操作的方法
2017/05/25 PHP
Laravel如何友好的修改.env配置文件详解
2017/06/07 PHP
php利用ob_start()清除输出和选择性输出的方法
2018/01/18 PHP
Div自动滚动到末尾的代码
2008/10/26 Javascript
jquery 多行文本框(textarea)高度变化
2013/07/03 Javascript
不使用浏览器运行javascript代码的方法
2013/07/24 Javascript
javascript中字符串的定义示例代码
2013/12/19 Javascript
JavaScript前端图片加载管理器imagepool使用详解
2014/12/29 Javascript
js操作css属性实现div层展开关闭效果的方法
2015/05/11 Javascript
jQuery实现的数值范围range2dslider选取插件特效多款代码分享
2015/08/27 Javascript
prototype框架中美元符号$用法分析
2016/01/22 Javascript
浅谈js的异步执行
2016/10/18 Javascript
fullCalendar中文API官方文档
2017/02/07 Javascript
详解vue 模版组件的三种用法
2017/07/21 Javascript
Kindeditor单独调用单图上传增加预览功能的实例
2017/07/31 Javascript
详解Ant Design of React的安装和使用方法
2018/12/27 Javascript
Python访问MySQL封装的常用类实例
2014/11/11 Python
Python3指定路径寻找符合匹配模式文件
2015/05/22 Python
Python求两个文本文件以行为单位的交集、并集与差集的方法
2015/06/17 Python
pygame 精灵的行走及二段跳的实现方法(必看篇)
2017/07/10 Python
Python下实现的RSA加密/解密及签名/验证功能示例
2017/07/17 Python
python进阶_浅谈面向对象进阶
2017/08/17 Python
使用python生成杨辉三角形的示例代码
2018/08/29 Python
python设计微型小说网站(基于Django+Bootstrap框架)
2019/07/08 Python
python返回数组的索引实例
2019/11/28 Python
Python函数的默认参数设计示例详解
2019/12/01 Python
Windows下Anaconda安装、换源与更新的方法
2020/04/17 Python
Django使用django-simple-captcha做验证码的实现示例
2021/01/07 Python
求职信范文英文版
2014/01/05 职场文书
大学教师师德师风演讲稿
2014/08/22 职场文书
中学生运动会通讯稿大全
2014/09/18 职场文书
婚礼父母致辞
2015/07/28 职场文书
Python+Appium新手教程
2021/04/17 Python
MySQL通过binlog恢复数据
2021/05/27 MySQL
java项目构建Gradle的使用教程
2022/03/24 Java/Android