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发送邮件附件以定时备份MySQL的教程
Apr 25 Python
Python实现二维数组按照某行或列排序的方法【numpy lexsort】
Sep 22 Python
python3下使用cv2.imwrite存储带有中文路径图片的方法
May 10 Python
使用matplotlib绘制图例标签中带有公式的图
Dec 13 Python
Python日志syslog使用原理详解
Feb 18 Python
python实现滑雪游戏
Feb 22 Python
python将logging模块封装成单独模块并实现动态切换Level方式
May 12 Python
python下对hsv颜色空间进行量化操作
Jun 04 Python
python中tkinter窗口位置\坐标\大小等实现示例
Jul 09 Python
Python爬虫小例子——爬取51job发布的工作职位
Jul 10 Python
Python 如何将integer转化为罗马数(3999以内)
Jun 05 Python
python缺失值填充方法示例代码
Dec 24 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 调用远程url的六种方法小结
2009/11/02 PHP
php+iframe实现隐藏无刷新上传文件
2012/02/10 PHP
alixixi runcode.asp的代码不错的应用
2007/08/08 Javascript
手把手教你自己写一个js表单验证框架的方法
2010/09/14 Javascript
在js中判断checkboxlist(.net控件客户端id)是否有选中
2013/04/11 Javascript
JS 去除Array中的null值示例代码
2013/11/20 Javascript
提高NodeJS中SSL服务的性能
2014/07/15 NodeJs
浅析javascript的间隔调用和延时调用
2014/11/12 Javascript
JS实现slide文字框缩放伸展效果代码
2015/11/05 Javascript
如何用angularjs制作一个完整的表格
2016/01/21 Javascript
浅谈js图片前端预览之filereader和window.URL.createObjectURL
2016/06/30 Javascript
JS实现一个简单的日历
2017/02/22 Javascript
解析Vue2 dist 目录下各个文件的区别
2017/11/22 Javascript
原生js实现each方法实例代码详解
2019/05/27 Javascript
ES6中Symbol、Set和Map用法详解
2019/08/20 Javascript
jQuery插件实现图片轮播效果
2020/10/19 jQuery
Vue toFixed保留两位小数的3种方式
2020/10/23 Javascript
Python实现的简单万年历例子分享
2014/04/25 Python
Python多进程同步Lock、Semaphore、Event实例
2014/11/21 Python
python中时间、日期、时间戳的转换的实现方法
2019/07/06 Python
Django和Flask框架优缺点对比
2019/10/24 Python
python打印异常信息的两种实现方式
2019/12/24 Python
python打印n位数“水仙花数”(实例代码)
2019/12/25 Python
基于Python的自媒体小助手---登录页面的实现代码
2020/06/29 Python
THE OUTNET美国官网:国际设计师品牌折扣网站
2017/03/07 全球购物
英国景点门票网站:attractiontix
2019/08/27 全球购物
Contém1g官网:巴西彩妆品牌
2020/01/17 全球购物
培训心得体会
2013/12/29 职场文书
晚宴邀请函范文
2014/01/15 职场文书
国际贸易求职信
2014/07/05 职场文书
大学生赌博检讨书
2014/09/22 职场文书
领导干部“四风”查摆问题个人整改措施
2014/10/28 职场文书
捐款感谢信
2015/01/20 职场文书
2015年科室工作总结
2015/04/10 职场文书
2019年最新七夕唯美祝福语(60条)
2019/07/22 职场文书
zabbix 代理服务器的部署与 zabbix-snmp 监控问题
2022/07/15 Servers