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运行的17个时新手常见错误小结
Aug 07 Python
详解Python的Django框架中Manager方法的使用
Jul 21 Python
Python实现列表转换成字典数据结构的方法
Mar 11 Python
Python实现批量检测HTTP服务的状态
Oct 27 Python
Python中最大最小赋值小技巧(分享)
Dec 23 Python
python实现word 2007文档转换为pdf文件
Mar 15 Python
python模块之subprocess模块级方法的使用
Mar 26 Python
Python语法分析之字符串格式化
Jun 13 Python
解决Django 在ForeignKey中出现 non-nullable field错误的问题
Aug 06 Python
python爬虫开发之Request模块从安装到详细使用方法与实例全解
Mar 09 Python
python异常处理、自定义异常、断言原理与用法分析
Mar 23 Python
用Python爬取LOL所有的英雄信息以及英雄皮肤的示例代码
Jul 13 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实现用户认证及管理完全源码
2007/03/11 PHP
网友原创的PHP模板类代码
2008/09/07 PHP
PHP缩略图等比例无损压缩,可填充空白区域补充色
2011/06/10 PHP
Yii中CArrayDataProvider和CActiveDataProvider区别实例分析
2016/03/02 PHP
php使用pclzip类实现文件压缩的方法(附pclzip类下载地址)
2016/04/30 PHP
用php实现分页效果的示例代码
2020/12/10 PHP
JavaScript Event学习第八章 事件的顺序
2010/02/07 Javascript
javascript 基础篇4 window对象,DOM
2012/03/14 Javascript
js中arguments的用法(实例讲解)
2013/11/30 Javascript
jquery点击缩略图切换视频播放特效代码分享
2015/09/15 Javascript
JavaScript阻止回车提交表单的方法
2015/12/30 Javascript
AngularJS转换响应内容
2016/01/27 Javascript
基于javascript制作经典传统的拼图游戏
2016/03/22 Javascript
html、css和jquery相结合实现简单的进度条效果实例代码
2016/10/24 Javascript
微信小程序 loading(加载中提示框)实例
2016/10/28 Javascript
select获取下拉框的值 下拉框默认选中方法
2018/02/28 Javascript
vue项目设置scrollTop不起作用(总结)
2018/12/21 Javascript
JavaScript闭包与作用域链实例分析
2019/01/21 Javascript
详解使用JWT实现单点登录(完全跨域方案)
2019/08/02 Javascript
vue新建项目并配置标准路由过程解析
2019/12/09 Javascript
python高手之路python处理excel文件(方法汇总)
2016/01/07 Python
浅谈python中requests模块导入的问题
2018/05/18 Python
Django Rest framework三种分页方式详解
2019/07/26 Python
Python 在OpenCV里实现仿射变换—坐标变换效果
2019/08/30 Python
Python实现线性插值和三次样条插值的示例代码
2019/11/13 Python
浅谈PyTorch中in-place operation的含义
2020/06/27 Python
python使用建议与技巧分享(二)
2020/08/17 Python
纯css3实现图片翻牌特效
2015/03/10 HTML / CSS
美国受信赖的教育产品供应商:Nest Learning
2018/06/14 全球购物
2014年元旦促销活动方案
2014/02/22 职场文书
读书小明星事迹材料
2014/05/03 职场文书
目标责任书格式
2014/07/28 职场文书
领导班子四风问题对照检查材料
2014/09/27 职场文书
店长岗位职责
2015/02/11 职场文书
植树节新闻稿
2015/07/17 职场文书
三下乡活动心得体会
2016/01/23 职场文书