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 装饰器装饰类中的方法实例
Apr 21 Python
Django中STATIC_ROOT和STATIC_URL及STATICFILES_DIRS浅析
May 08 Python
PyCharm代码整体缩进,反向缩进的方法
Jun 25 Python
使用pytorch进行图像的顺序读取方法
Jul 27 Python
使用python实现快速搭建简易的FTP服务器
Sep 12 Python
Python3删除排序数组中重复项的方法分析
Jan 31 Python
用python实现刷点击率的示例代码
Feb 21 Python
Django框架设置cookies与获取cookies操作详解
May 27 Python
python3安装crypto出错及解决方法
Jul 30 Python
Django之PopUp的具体实现方法
Aug 31 Python
Python可变参数会自动填充前面的默认同名参数实例
Nov 18 Python
详解python内置常用高阶函数(列出了5个常用的)
Feb 21 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设计模式  Command(命令模式)
2011/06/17 PHP
php 生成短网址原理及代码
2014/01/23 PHP
php保存信息到当前Session的方法
2015/03/16 PHP
php正则表达式获取内容所有链接
2015/07/24 PHP
JS实现div居中示例
2014/04/17 Javascript
js,jquery滚动/跳转页面到指定位置的实现思路
2014/06/03 Javascript
jQuery截取指定长度字符串的实现原理及代码
2014/07/01 Javascript
iframe调用父页面函数示例详解
2014/07/17 Javascript
jQuery实现div拖拽效果实例分析
2016/02/20 Javascript
详解webpack 入门总结和实践(按需异步加载,css单独打包,生成多个入口文件)
2017/06/20 Javascript
javascript 开发之网页兼容各种浏览器
2017/09/28 Javascript
基于node搭建服务器,写接口,调接口,跨域的实例
2018/05/13 Javascript
JS实现根据数组对象的某一属性排序操作示例
2019/01/14 Javascript
JS基于开关思想实现的数组去重功能【案例】
2019/02/18 Javascript
Vuex实现简单购物车
2021/01/10 Vue.js
关于javascript中的promise的用法和注意事项(推荐)
2021/01/15 Javascript
Python基础中所出现的异常报错总结
2016/11/19 Python
python非递归全排列实现方法
2017/04/10 Python
django中静态文件配置static的方法
2018/05/20 Python
Python实现聊天机器人的示例代码
2018/07/09 Python
opencv python 2D直方图的示例代码
2018/07/20 Python
Django 中间键和上下文处理器的使用
2019/03/17 Python
Django实现网页分页功能
2019/10/31 Python
Python使用Tkinter实现滚动抽奖器效果
2020/01/06 Python
Django使用Celery加redis执行异步任务的实例内容
2020/02/20 Python
使用python 计算百分位数实现数据分箱代码
2020/03/03 Python
Python TestSuite生成测试报告过程解析
2020/07/23 Python
多视角3D逼真HTML5水波动画
2016/03/03 HTML / CSS
伊芙丽官方旗舰店:中国淑女一线品牌
2017/12/01 全球购物
机电专业体育教师求职信
2013/09/21 职场文书
教师绩效工资方案
2014/02/01 职场文书
个人公开承诺书
2014/03/28 职场文书
会计专业自荐书
2014/07/08 职场文书
文员试用期转正自我鉴定
2014/09/14 职场文书
如何利用opencv判断两张图片是否相同详解
2021/07/07 Python
PHP设计模式(观察者模式)
2021/07/07 PHP