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中global与nonlocal比较
Nov 21 Python
对于Python中线程问题的简单讲解
Apr 03 Python
python开发之IDEL(Python GUI)的使用方法图文详解
Nov 12 Python
浅析Git版本控制器使用
Dec 10 Python
Python结合ImageMagick实现多张图片合并为一个pdf文件的方法
Apr 24 Python
Python3 利用requests 库进行post携带账号密码请求数据的方法
Oct 26 Python
Django ORM 自定义 char 类型字段解析
Aug 09 Python
解决python 找不到module的问题
Feb 12 Python
使用python客户端访问impala的操作方式
Mar 28 Python
python matplotlib实现将图例放在图外
Apr 17 Python
基于Tensorflow一维卷积用法详解
May 22 Python
Python如何使用神经网络进行简单文本分类
Feb 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后获取影响的行数发生异常解决方法
2013/03/28 PHP
浅析PHP中Collection 类的设计
2013/06/21 PHP
用 Composer构建自己的 PHP 框架之使用 ORM
2014/10/30 PHP
既简单又安全的PHP验证码 附调用方法
2016/06/02 PHP
PHP自动载入类文件函数__autoload的使用方法
2019/03/25 PHP
javascript语句中的CDATA标签的意义
2007/05/09 Javascript
IE浏览器打印的页眉页脚设置解决方法
2009/12/08 Javascript
jquery自定义属性(类型/属性值)
2013/05/21 Javascript
禁止iframe脚本弹出的窗口覆盖了父窗口的方法
2014/09/06 Javascript
jQuery的css()方法用法实例
2014/12/24 Javascript
AngularJS模块详解及示例代码
2016/08/17 Javascript
AngularJS 作用域详解及示例代码
2016/08/17 Javascript
工作中常用的js、jquery自定义扩展函数代码片段汇总
2016/12/22 Javascript
基于JavaScript实现淘宝商品广告效果
2017/08/10 Javascript
微信小程序onLaunch异步,首页onLoad先执行?
2018/09/20 Javascript
JavaScript遍历数组的三种方法map、forEach与filter实例详解
2019/02/27 Javascript
[03:40]DOTA2亚洲邀请赛小组赛第二日 赛事回顾
2015/01/31 DOTA
[01:03:27]NAVI vs EG 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
Python下的Mysql模块MySQLdb安装详解
2014/04/09 Python
Python自动化运维和部署项目工具Fabric使用实例
2016/09/18 Python
Django实现快速分页的方法实例
2017/10/22 Python
启动Atom并运行python文件的步骤
2018/11/09 Python
Python GUI学习之登录系统界面篇
2019/08/21 Python
pytorch torchvision.ImageFolder的用法介绍
2020/02/20 Python
Python中openpyxl实现vlookup函数的实例
2020/10/28 Python
西安众合通用.net笔试题
2013/03/18 面试题
Linux内核产生并发的原因
2012/07/13 面试题
文秘专业应届生求职信范文
2013/11/14 职场文书
计算机专业学生求职信分享
2013/12/15 职场文书
创业计划书的主要内容有哪些
2014/01/29 职场文书
淘宝好评语大全
2014/05/05 职场文书
师德师风自我评价范文
2014/09/11 职场文书
2014年党的群众路线学习心得体会
2014/11/05 职场文书
培训讲师开场白
2015/06/01 职场文书
Python图像处理之图像拼接
2021/04/28 Python
sql注入教程之类型以及提交注入
2021/08/02 MySQL