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 相关文章推荐
python实现猜数字游戏(无重复数字)示例分享
Mar 29 Python
Python getopt模块处理命令行选项实例
May 13 Python
Python logging模块学习笔记
May 24 Python
介绍Python中几个常用的类方法
Apr 08 Python
python将每个单词按空格分开并保存到文件中
Mar 19 Python
分分钟入门python语言
Mar 20 Python
windows 10 设定计划任务自动执行 python 脚本的方法
Sep 11 Python
调用其他python脚本文件里面的类和方法过程解析
Nov 15 Python
浅谈spring boot 集成 log4j 解决与logback冲突的问题
Feb 20 Python
selenium WebDriverWait类等待机制的实现
Mar 18 Python
linux centos 7.x 安装 python3.x 替换 python2.x的过程解析
Dec 14 Python
Python之Sklearn使用入门教程
Feb 19 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
五款PHP代码重构工具推荐
2014/10/14 PHP
php上传大文件设置方法
2016/04/14 PHP
php英文单词统计器
2016/06/23 PHP
php操作redis数据库常见方法实例总结
2020/02/20 PHP
基于jquery的滚动新闻列表
2010/06/19 Javascript
jquery如何根据值设置默认的选中项
2014/03/17 Javascript
javascript图片滑动效果实现
2021/01/28 Javascript
jQuery Validate插件实现表单强大的验证功能
2015/12/18 Javascript
BootStrap智能表单实战系列(七)验证的支持
2016/06/13 Javascript
javascript实现右下角广告框效果
2017/02/01 Javascript
js Element Traversal规范中的元素遍历方法
2018/04/19 Javascript
微信小程序整合使用富文本编辑器的方法详解
2019/04/25 Javascript
JavaScript使用面向对象实现的拖拽功能详解
2019/06/12 Javascript
layui自定义验证,用ajax查询后台是否有重复数据,form.verify的例子
2019/09/06 Javascript
js实现拖动缓动效果
2020/01/13 Javascript
使用python统计文件行数示例分享
2014/02/21 Python
Python3爬虫学习之将爬取的信息保存到本地的方法详解
2018/12/12 Python
Python学习笔记之集合的概念和简单使用示例
2019/08/22 Python
python实现的发邮件功能示例
2019/09/11 Python
PyCharm无法引用自身项目解决方式
2020/02/12 Python
UI自动化定位常用实现方法代码示例
2020/10/27 Python
新西兰最大、占有率最高的综合性药房:PharmacyDirect药房中文网
2020/11/03 全球购物
资深财务管理人员自我评价
2013/09/22 职场文书
农村婚礼证婚词
2014/01/10 职场文书
新学期开学寄语
2014/01/18 职场文书
小班重阳节活动方案
2014/02/08 职场文书
厨师长岗位职责
2014/03/02 职场文书
班主任寄语大全
2014/04/04 职场文书
超市七夕促销活动方案
2014/08/28 职场文书
代收款委托书范本
2014/10/01 职场文书
2014年团队工作总结
2014/11/24 职场文书
2019年暑期法院实习报告
2019/12/18 职场文书
浅谈GO中的Channel以及死锁的造成
2022/03/18 Golang
配置Kubernetes外网访问集群
2022/03/31 Servers
Docker官方工具docker-registry案例演示
2022/04/13 Servers
解决IIS7下无法绑定https主机的问题
2022/04/29 Servers