Python3并发写文件与Python对比


Posted in Python onNovember 20, 2019

这篇文章主要介绍了Python3并发写文件原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

使用python2在进行并发写的时候,发现文件会乱掉,就是某一行中间会插入其他行的内容。

但是在使用python3进行并发写的时候,无论是多进程,还是多线程,都没有出现这个问题,难道是python3的特性吗?

import time
import os
import multiprocessing
from multiprocessing.dummy import Pool as ThreadPool


def write(val, file):
  w = open(file, "a")
  for i in range(100):
    w.write("%s\n" % val)
    time.sleep(0.001)

def thread_write(file):
  res, pools = [], ThreadPool(10)
  for i in range(10):
    val = str(i) * 1000
    res.append(pools.apply_async(func=write, args=(val, file, )))

  while res:
    for ret in res:
      if ret.ready():
        res.remove(ret)
    time.sleep(0.01)

def mutil_write(file):
  pools = multiprocessing.Pool(processes=10)
  res = []
  for i in range(100):
    res.append(pools.apply_async(thread_write, args=(file, )))

  while res:
    for ret in res:
      if ret.ready():
        res.remove(ret)
    time.sleep(0.01)

if __name__ == '__main__':
  file = "./write_test"
  mutil_write(file)

  with open(file) as fb:
    lines = 0
    line_len = []
    for line in fb:
      lines += 1
      line = line.strip()
      line_len.append(len(line))
      if len(line) != 1000:
        raise(Exception("error line: %s, len: %d" % (line, len(line))))

    print("lines:%d, max len:%d, min:%d, avg:%.2f" % (lines, max(line_len), min(line_len), sum(line_len)/len(line_len)))
  os.remove(file)

上面代码,多进程并发写结束后,校验每一行的长度是否是设置好的长度。用python3反复运行,均通过测试没有异常。

$ python3 --version
Python 3.7.4

$ python3 t.py
lines:10000, max len:1000, min:1000, avg:1000.00

如果用python2,则会出现异常:

$ python2 --version
Python 2.7.15

$ python2 t.py
Traceback (most recent call last):
 File "t.py", line 49, in <module>
  raise(Exception("error line: %s, len: %d" % (line, len(line))))
Exception: error line: 333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333330000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000, len: 1092

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python3实现带附件的定时发送邮件功能
Dec 22 Python
python3 实现对图片进行局部切割的方法
Dec 05 Python
通过python扫描二维码/条形码并打印数据
Nov 14 Python
Python 获取numpy.array索引值的实例
Dec 06 Python
YUV转为jpg图像的实现
Dec 09 Python
Python实现转换图片背景颜色代码
Apr 30 Python
解决Python发送Http请求时,中文乱码的问题
Apr 30 Python
django admin 根据choice字段选择的不同来显示不同的页面方式
May 13 Python
python实现PDF中表格转化为Excel的方法
Jun 16 Python
Python3爬虫中Selenium的用法详解
Jul 10 Python
selenium3.0+python之环境搭建的方法步骤
Feb 01 Python
Python爬虫网络请求之代理服务器和动态Cookies
Apr 12 Python
python实现高斯(Gauss)迭代法的例子
Nov 20 #Python
python、Matlab求定积分的实现
Nov 20 #Python
python 求定积分和不定积分示例
Nov 20 #Python
python 计算积分图和haar特征的实例代码
Nov 20 #Python
Python 函数绘图及函数图像微分与积分
Nov 20 #Python
python抓取多种类型的页面方法实例
Nov 20 #Python
Python超越函数积分运算以及绘图实现代码
Nov 20 #Python
You might like
让你的WINDOWS同时支持MYSQL4,MYSQL4.1,MYSQL5X
2006/12/06 PHP
Joomla数据库操作之JFactory::getDBO用法
2016/05/05 PHP
Javascript的构造函数和constructor属性
2010/01/09 Javascript
jQuery中:last-child选择器用法实例
2014/12/31 Javascript
解决angular的post请求后SpringMVC后台接收不到参数值问题的方法
2015/12/10 Javascript
快速掌握Node.js环境的安装与运行方法
2016/02/16 Javascript
js 截取或者替换字符串中的数字实现方法
2016/06/13 Javascript
node.js实现的装饰者模式示例
2017/09/06 Javascript
如何去除vue项目中的#及其ie9兼容性
2018/01/11 Javascript
js中时间格式化的几种方法
2018/07/22 Javascript
javascript设计模式 ? 命令模式原理与用法实例分析
2020/04/20 Javascript
jquery实现有过渡效果的tab切换
2020/07/17 jQuery
[06:25]DOTA2英雄梦之声_第17期_大地之灵
2014/06/20 DOTA
详尽讲述用Python的Django框架测试驱动开发的教程
2015/04/22 Python
详解python中的线程
2018/02/10 Python
Flask框架使用DBUtils模块连接数据库操作示例
2018/07/20 Python
python实现zabbix发送短信脚本
2018/09/17 Python
python获取磁盘号下盘符步骤详解
2019/06/19 Python
python代码打印100-999之间的回文数示例
2019/11/24 Python
使用pandas的box_plot去除异常值
2019/12/10 Python
Python log模块logging记录打印用法解析
2020/01/20 Python
python去除删除数据中\u0000\u0001等unicode字符串的代码
2020/03/06 Python
为什么说python更适合树莓派编程
2020/07/20 Python
Python grpc超时机制代码示例
2020/09/14 Python
python抢购软件/插件/脚本附完整源码
2021/03/04 Python
世界上最伟大的马产品:Equiderma
2020/01/07 全球购物
大学学年自我鉴定
2013/10/28 职场文书
制药工程专业毕业生推荐信
2013/12/24 职场文书
机械制造专业毕业生求职信
2014/03/02 职场文书
党员干部承诺书
2014/03/25 职场文书
工作失职检讨书(精华篇)
2014/10/15 职场文书
5.12护士节活动总结
2015/02/10 职场文书
毕业实习感受与体会
2015/05/26 职场文书
解约证明模板
2015/06/19 职场文书
手术室消毒隔离制度
2015/08/05 职场文书
《艾尔登法环》1.03.3补丁上线 碎星伤害调整
2022/04/06 其他游戏