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 &amp; Flask 实现RESTful Web API的实例
Sep 19 Python
机器学习python实战之手写数字识别
Nov 01 Python
Django入门使用示例
Dec 12 Python
python实现Floyd算法
Jan 03 Python
pandas创建新Dataframe并添加多行的实例
Apr 08 Python
使用 Python 玩转 GitHub 的贡献板(推荐)
Apr 04 Python
详解python中的模块及包导入
Aug 30 Python
django框架中ajax的使用及避开CSRF 验证的方式详解
Dec 11 Python
基于Pycharm加载多个项目过程图解
Jan 19 Python
python+selenium定时爬取丁香园的新型冠状病毒数据并制作出类似的地图(部署到云服务器)
Feb 09 Python
Java byte数组操纵方式代码实例解析
Jul 22 Python
Python Django框架介绍之模板标签及模板的继承
May 27 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+Html+缓存
2006/12/20 PHP
快速配置PHPMyAdmin方法
2008/06/05 PHP
php 特殊字符处理函数
2008/09/05 PHP
解析PHP无限级分类方法及代码
2013/06/21 PHP
php-msf源码详解
2017/12/25 PHP
一个简单的jQuery插件制作 学习过程及实例
2010/04/25 Javascript
date.parse在IE和FF中的区别
2010/07/29 Javascript
JS文本框不能输入空格验证方法
2013/03/19 Javascript
在页面上用action传递参数到后台出现乱码的解决方法
2013/12/31 Javascript
js中的hasOwnProperty和isPrototypeOf方法使用实例
2014/06/06 Javascript
javascript进行四舍五入方法汇总
2014/12/16 Javascript
jquery实现图片上传之前预览的方法
2015/07/11 Javascript
javascript图片切换综合实例(循环切换、顺序切换)
2016/01/13 Javascript
Vue.js每天必学之Class与样式绑定
2016/09/05 Javascript
js动态生成form 并用ajax方式提交的实现方法
2016/09/09 Javascript
微信小程序滚动Tab实现左右可滑动切换
2017/08/17 Javascript
浅谈使用mpvue开发小程序需要注意和了解的知识点
2018/05/23 Javascript
在 Angular-cli 中使用 simple-mock 实现前端开发 API Mock 接口数据模拟功能的方法
2018/11/28 Javascript
手把手教你 CKEDITOR 4 扩展插件制作
2019/06/18 Javascript
[00:08]DOTA2勇士令状等级奖励“天外飞星”
2019/05/24 DOTA
[04:59]DOTA2-DPC中国联赛 正赛 Ehome vs iG 选手采访
2021/03/11 DOTA
python BeautifulSoup设置页面编码的方法
2015/04/03 Python
使用Python3 编写简单信用卡管理程序
2016/12/21 Python
python使用Plotly绘图工具绘制散点图、线形图
2019/04/02 Python
Python文本处理简单易懂方法解析
2019/12/19 Python
TensorFlow低版本代码自动升级为1.0版本
2021/02/20 Python
巧用HTML5给按钮背景设计不同的动画简单实例
2016/08/09 HTML / CSS
英国领先品牌手动工具和电动工具供应商:Tooled Up
2018/11/24 全球购物
澳大利亚在线购买葡萄酒:The Wine Collective
2020/02/20 全球购物
机械工程师的岗位职责
2013/11/17 职场文书
一份恶作剧的检讨书
2014/09/13 职场文书
给女朋友的道歉短信
2015/05/12 职场文书
《钓鱼的启示》教学反思
2016/02/18 职场文书
数据库之SQL技巧整理案例
2021/07/07 SQL Server
python之PySide2安装使用及QT Designer UI设计案例教程
2021/07/26 Python
mybatis3中@SelectProvider传递参数方式
2021/08/04 Java/Android