Python多线程同步---文件读写控制方法


Posted in Python onFebruary 12, 2019

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 相关文章推荐
Python中实现从目录中过滤出指定文件类型的文件
Feb 02 Python
Python判断Abundant Number的方法
Jun 15 Python
如何用Python实现简单的Markdown转换器
Jul 16 Python
Flask实现图片的上传、下载及展示示例代码
Aug 03 Python
python 对给定可迭代集合统计出现频率,并排序的方法
Oct 18 Python
python实现归并排序算法
Nov 22 Python
python 限制函数执行时间,自己实现timeout的实例
Jan 12 Python
python读取目录下所有的jpg文件,并显示第一张图片的示例
Jun 13 Python
python 获取等间隔的数组实例
Jul 04 Python
Python pandas库中的isnull()详解
Dec 26 Python
Appium+Python实现简单的自动化登录测试的实现
Jan 26 Python
python爬虫智能翻页批量下载文件的实例详解
Feb 02 Python
Python 按字典dict的键排序,并取出相应的键值放于list中的实例
Feb 12 #Python
Python 互换字典的键值对实例
Feb 12 #Python
Python根据成绩分析系统浅析
Feb 11 #Python
Python实现的在特定目录下导入模块功能分析
Feb 11 #Python
Python正则表达式和re库知识点总结
Feb 11 #Python
Python实现的大数据分析操作系统日志功能示例
Feb 11 #Python
Python实现对特定列表进行从小到大排序操作示例
Feb 11 #Python
You might like
PHP安全配置
2006/12/06 PHP
PHP中::、-&amp;gt;、self、$this几种操作符的区别介绍
2013/04/24 PHP
PHP+javascript制作带提示的验证码源码分享
2014/05/28 PHP
PHP 正则表达式小结
2015/02/12 PHP
DEDECMS首页调用图片集里的多张图片
2015/06/05 PHP
IE、FF、Chrome浏览器中的JS差异介绍
2013/08/13 Javascript
jquery图片切换实例分析
2015/04/15 Javascript
JavaScript中Date.toSource()方法的使用教程
2015/06/12 Javascript
jquery $.trim()去除字符串空格的实现方法【附图例】
2016/03/30 Javascript
javascript中BOM基础知识总结
2017/02/14 Javascript
JS去掉字符串前后空格或去掉所有空格的用法
2017/03/25 Javascript
vuex的module模块用法示例
2018/11/12 Javascript
ES6 Array常用扩展的应用实例分析
2019/06/26 Javascript
Ant Design的Table组件去除
2020/10/24 Javascript
[05:04]DOTA2上海特级锦标赛主赛事第二日TOP10
2016/03/04 DOTA
python中__call__内置函数用法实例
2015/06/04 Python
Python爬虫使用脚本登录Github并查看信息
2018/07/16 Python
python opencv实现旋转矩形框裁减功能
2018/07/25 Python
Django在admin后台集成TinyMCE富文本编辑器的例子
2019/08/09 Python
解决Django连接db遇到的问题
2019/08/29 Python
Java多线程实现四种方式原理详解
2020/06/02 Python
Python实现加密的RAR文件解压的方法(密码已知)
2020/09/11 Python
借助HTML5 Canvas来绘制三角形和矩形等多边形的方法
2016/03/14 HTML / CSS
全球第二大家装零售商:Lowe’s
2018/01/13 全球购物
Holiday Inn中国官网:IHG旗下假日酒店预订
2018/04/08 全球购物
REN Clean Skincare官网:英国本土有机护肤品牌
2019/02/23 全球购物
韩国乐天网上商城:Lotte iMall
2021/02/03 全球购物
自我鉴定思想方面
2013/10/07 职场文书
个人简历自我鉴定
2013/10/11 职场文书
硕士研究生求职自荐信范文
2014/03/11 职场文书
实验心得体会
2014/09/05 职场文书
2014年话务员工作总结
2014/11/19 职场文书
离婚案件原告代理词
2015/05/23 职场文书
《春酒》教学反思
2016/02/22 职场文书
思想品德课教学反思
2016/02/24 职场文书
Python中基础数据类型 set集合知识点总结
2021/08/02 Python