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 相关文章推荐
py中的目录与文件判别代码
Jul 16 Python
rhythmbox中文名乱码问题解决方法
Sep 06 Python
python计算书页码的统计数字问题实例
Sep 26 Python
深入解析Python编程中JSON模块的使用
Oct 15 Python
浅谈Python使用Bottle来提供一个简单的web服务
Dec 27 Python
一个月入门Python爬虫学习,轻松爬取大规模数据
Jan 03 Python
如何基于Python制作有道翻译小工具
Dec 16 Python
Pytorch中实现只导入部分模型参数的方式
Jan 02 Python
Python读取xlsx数据生成图标代码实例
Aug 12 Python
python代码实现猜拳小游戏
Nov 30 Python
PyMongo 查询数据的实现
Jun 28 Python
python人工智能human learn绘图可创建机器学习模型
Nov 23 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
Laravel构建即时应用的一种实现方法详解
2017/08/31 PHP
漂亮的thinkphp 跳转页封装示例
2019/10/16 PHP
记Laravel调用Gin接口调用formData上传文件的实现方法
2019/12/12 PHP
(转载)JavaScript中匿名函数,函数直接量和闭包
2007/05/08 Javascript
jQuery帮助之CSS尺寸(五)outerHeight、outerWidth
2009/11/14 Javascript
javascript 面向对象全新理练之数据的封装
2009/12/03 Javascript
JavaScript实现表格点击排序的方法
2015/05/11 Javascript
Javascript实现网络监测的方法
2015/07/31 Javascript
jquery实现滑动特效代码
2015/08/10 Javascript
JS中dom0级事件和dom2级事件的区别介绍
2016/05/05 Javascript
javascript作用域、作用域链(菜鸟必看)
2016/06/16 Javascript
js图片放大镜效果实现方法详解
2020/10/28 Javascript
Angular.JS去掉访问路径URL中的#号详解
2017/03/30 Javascript
node.js(express)中使用Jcrop进行图片剪切上传功能
2017/04/21 Javascript
JavaScript通过改变文字透明度实现的文字闪烁效果实例
2017/04/27 Javascript
使用Vue.js和Element-UI做一个简单登录页面的实例
2018/02/23 Javascript
JavaScript根据json生成html表格的示例代码
2018/10/24 Javascript
Vue表单控件数据绑定方法详解
2020/02/05 Javascript
vue-quill-editor 自定义工具栏和自定义图片上传路径操作
2020/08/03 Javascript
[03:18]DOTA2亚洲邀请赛小组赛第一日 RECAP赛事回顾
2015/01/30 DOTA
[04:40]2016国际邀请赛中国区预选赛全程TOP10镜头集锦
2016/07/01 DOTA
[00:12]2018DOTA2亚洲邀请赛 Somnus丶M出阵单挑
2018/04/06 DOTA
python字符串与url编码的转换实例
2018/05/10 Python
python实现俄罗斯方块
2018/06/26 Python
python numpy 一维数组转变为多维数组的实例
2018/07/02 Python
Mac 使用python3的matplot画图不显示的解决
2019/11/23 Python
HTML5在手机端实现视频全屏展示方法
2020/11/23 HTML / CSS
求职者应聘的自我评价
2013/10/16 职场文书
高校教师思想汇报
2014/01/11 职场文书
幼儿教师演讲稿
2014/05/06 职场文书
数控机床专业自荐信
2014/05/19 职场文书
看上去很美观后感
2015/06/10 职场文书
《桂花雨》教学反思
2016/02/19 职场文书
教你怎么用Python处理excel实现自动化办公
2021/04/30 Python
Keras在mnist上的CNN实践,并且自定义loss函数曲线图操作
2021/05/25 Python
Python数据可视化之基于pyecharts实现的地理图表的绘制
2021/06/10 Python