python多线程同步之文件读写控制


Posted in Python onFebruary 25, 2021

本文实例为大家分享了python多线程同步之文件读写控制的具体代码,供大家参考,具体内容如下

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获取Linux系统的各种信息
Jul 10 Python
python通过pil为png图片填充上背景颜色的方法
Mar 17 Python
使用Python的内建模块collections的教程
Apr 28 Python
Google开源的Python格式化工具YAPF的安装和使用教程
May 31 Python
django自带的server 让外网主机访问方法
May 14 Python
Python pygorithm模块用法示例【常见算法测试】
Aug 16 Python
python实现从文件中读取数据并绘制成 x y 轴图形的方法
Oct 14 Python
python 并发下载器实现方法示例
Nov 22 Python
在pytorch中对非叶节点的变量计算梯度实例
Jan 10 Python
Python使用多进程运行含有任意个参数的函数
May 02 Python
python 实现图像快速替换某种颜色
Jun 04 Python
Python可视化神器pyecharts绘制地理图表
Jul 07 Python
python线程中的同步问题及解决方法
Aug 29 #Python
python实现H2O中的随机森林算法介绍及其项目实战
Aug 29 #Python
flask/django 动态查询表结构相同表名不同数据的Model实现方法
Aug 29 #Python
深入了解python中元类的相关知识
Aug 29 #Python
Django shell调试models输出的SQL语句方法
Aug 29 #Python
python实现文件的分割与合并
Aug 29 #Python
Python配置文件处理的方法教程
Aug 29 #Python
You might like
PHP引用符&amp;的用法详细解析
2013/08/22 PHP
php实现的Timer页面运行时间监测类
2014/09/24 PHP
PHP内存使用情况如何获取
2015/10/10 PHP
PHP的openssl加密扩展使用小结(推荐)
2016/07/18 PHP
PHP实现支持加盐的图片加密解密
2016/09/09 PHP
PHP的中使用非缓冲模式查询数据库的方法
2017/02/05 PHP
JavaScript 高效运行代码分析
2010/03/18 Javascript
ExtJS 下拉多选框lovcombo
2010/05/19 Javascript
解析Jquery取得iframe中元素的几种方法
2013/07/04 Javascript
window.onresize 多次触发的解决方法
2013/11/08 Javascript
append和appendTo的区别以及appendChild用法
2013/12/24 Javascript
JavaScript实现N皇后问题算法谜题解答
2014/12/29 Javascript
jquery滚动到顶部底部代码
2015/04/20 Javascript
jquery实现弹出层效果实例
2015/05/19 Javascript
基于jQuery全屏焦点图左右切换插件responsiveslides
2015/09/07 Javascript
AngularJS自动表单验证
2016/02/01 Javascript
jQuery根据表单name获取值的方法
2016/05/24 Javascript
[js高手之路]HTML标签解释成DOM节点的实现方法
2017/08/31 Javascript
JS中原始值和引用值的储存方式示例详解
2018/03/23 Javascript
js+canvas实现五子棋小游戏
2020/08/02 Javascript
JavaScript代码简化技巧实例解析
2020/09/09 Javascript
手写Vue源码之数据劫持示例详解
2021/01/04 Vue.js
[01:12:35]Spirit vs Navi Supermajor小组赛 A组败者组第一轮 BO3 第二场 6.2
2018/06/03 DOTA
Python Json模块中dumps、loads、dump、load函数介绍
2018/05/15 Python
对Python3使运行暂停的方法详解
2019/02/18 Python
python3发送邮件需要经过代理服务器的示例代码
2019/07/25 Python
Python实现二叉树的最小深度的两种方法
2019/09/30 Python
pandas DataFrame运算的实现
2020/06/14 Python
Python3 webservice接口测试代码详解
2020/06/23 Python
Python实现LR1文法的完整实例代码
2020/10/25 Python
如何用canvas实现在线签名的示例代码
2018/07/10 HTML / CSS
物联网工程专业推荐信
2014/09/08 职场文书
2014幼儿园教育教学工作总结
2014/12/17 职场文书
求职自荐信怎么写
2015/03/04 职场文书
Java中PriorityQueue实现最小堆和最大堆的用法
2021/06/27 Java/Android
Android存储中最基本的文件存储方式
2022/04/30 Java/Android