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中处理XML的教程
Apr 29 Python
Python随手笔记第一篇(2)之初识列表和元组
Jan 23 Python
深入理解Python中变量赋值的问题
Jan 12 Python
python编程线性回归代码示例
Dec 07 Python
Python实现改变与矩形橡胶的线条的颜色代码示例
Jan 05 Python
浅谈Python中的bs4基础
Oct 21 Python
python DataFrame 取差集实例
Jan 30 Python
WIn10+Anaconda环境下安装PyTorch(避坑指南)
Jan 30 Python
python查找重复图片并删除(图片去重)
Jul 16 Python
python的pyecharts绘制各种图表详细(附代码)
Nov 11 Python
Python+PyQt5+MySQL实现天气管理系统
Jun 16 Python
python3爬虫中多线程进行解锁操作实例
Nov 25 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操作mysql数据库的基本类代码
2014/02/25 PHP
PHP易混淆知识整理笔记
2015/09/24 PHP
PHP文件上传之多文件上传的实现思路
2016/01/27 PHP
javascript 面向对象 function类
2010/05/13 Javascript
Javascript中的window.event.keyCode使用介绍
2011/04/26 Javascript
jquery自定义下拉列表示例
2014/04/25 Javascript
Javascript 绘制 sin 曲线过程附图
2014/08/21 Javascript
JavaScript中判断原生函数检查function是否是原生代码
2014/09/09 Javascript
使用jQuery实现星级评分代码分享
2014/12/09 Javascript
jQuery中document与window以及load与ready 区别详解
2014/12/29 Javascript
防止Node.js中错误导致进程阻塞的办法
2016/08/11 Javascript
JavaScript模板引擎Template.js使用详解
2016/12/15 Javascript
使用Promise链式调用解决多个异步回调的问题
2017/01/15 Javascript
微信小程序 网络请求(post请求,get请求)
2017/01/17 Javascript
js模拟支付宝密码输入框
2017/04/11 Javascript
微信小程序商城项目之购物数量加减(3)
2017/04/17 Javascript
详解Vue.js分发之作用域槽
2017/06/13 Javascript
详解angular 中的自定义指令之详解API
2017/06/20 Javascript
详解在create-react-app使用less与antd按需加载
2018/12/06 Javascript
使用weixin-java-miniapp配置进行单个小程序的配置详解
2019/03/29 Javascript
Python实现通过文件路径获取文件hash值的方法
2017/04/29 Python
Python用 KNN 进行验证码识别的实现方法
2018/02/06 Python
tensorflow入门之训练简单的神经网络方法
2018/02/26 Python
pytorch获取模型某一层参数名及参数值方式
2019/12/30 Python
Python标准库:内置函数max(iterable, *[, key, default])说明
2020/04/25 Python
基于python实现操作redis及消息队列
2020/08/27 Python
详解HTML5中ol标签的用法
2015/09/08 HTML / CSS
大学生军训感想
2014/02/16 职场文书
小学毕业感言500字
2014/02/28 职场文书
研究生毕业自我鉴定范文
2014/03/27 职场文书
关于保护环境的标语
2014/06/09 职场文书
暑假学习心得体会
2014/09/02 职场文书
四风问题对照检查材料整改措施
2014/09/27 职场文书
观后感格式
2015/06/19 职场文书
六年级语文教学反思
2016/03/03 职场文书
NGINX 权限控制文件预览和下载的实现原理
2022/01/18 Servers