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正则表达式匹配ip地址实例
Oct 09 Python
Python 自动化表单提交实例代码
Jun 08 Python
python读取xlsx的方法
Dec 25 Python
简单了解Python生成器是什么
Jul 02 Python
解决Django后台ManyToManyField显示成Object的问题
Aug 09 Python
利用python在大量数据文件下删除某一行的例子
Aug 21 Python
解决tensorboard多个events文件显示紊乱的问题
Feb 15 Python
Python如何将函数值赋给变量
Apr 28 Python
Python使用shutil模块实现文件拷贝
Jul 31 Python
anaconda3安装及jupyter环境配置全教程
Aug 24 Python
python不同版本的_new_不同点总结
Dec 09 Python
详解Python爬虫爬取博客园问题列表所有的问题
Jan 18 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 If Else(elsefi) 语句
2013/04/07 PHP
ThinkPHP应用模式扩展详解
2014/07/16 PHP
3Z版基于jquery的图片复选框(asp.net+jquery)
2010/04/12 Javascript
使用简洁的jQuery方法实现隔行换色功能
2014/01/02 Javascript
node.js开机自启动脚本文件
2014/12/24 Javascript
深入理解JavaScript系列(40):设计模式之组合模式详解
2015/03/04 Javascript
jQuery EasyUI中DataGird动态生成列的方法
2016/04/05 Javascript
jQuery实现可以编辑的表格实例详解【附demo源码下载】
2016/07/09 Javascript
JavaScript组合模式学习要点
2016/08/26 Javascript
妙用Bootstrap的 popover插件实现校验表单提示功能
2016/08/29 Javascript
jquery对Json的各种遍历方法总结(必看篇)
2016/09/29 Javascript
Nodejs 搭建简单的Web服务器详解及实例
2016/11/30 NodeJs
jQuery插件HighCharts绘制2D带有Legend的饼图效果示例【附demo源码下载】
2017/03/10 Javascript
jquery ztree实现右键收藏功能
2017/11/20 jQuery
原生JS+HTML5实现的可调节写字板功能示例
2018/08/30 Javascript
详解使用uni-app开发微信小程序之登录模块
2019/05/09 Javascript
javascript面向对象三大特征之封装实例详解
2019/07/24 Javascript
原生JS实现记忆翻牌游戏
2020/07/31 Javascript
[02:19]DOTA2女子战队FOX视频专访:希望更多美眉一起加入
2013/10/15 DOTA
[52:44]VGJ.T vs infamous Supermajor小组赛D组败者组第一轮 BO3 第一场 6.3
2018/06/04 DOTA
Python(Tornado)模拟登录小米抢手机
2013/11/12 Python
django 通过url实现简单的权限控制的例子
2019/08/16 Python
Python Django模板之模板过滤器与自定义模板过滤器示例
2019/10/18 Python
Pandas 解决dataframe的一列进行向下顺移问题
2019/12/27 Python
详解python常用命令行选项与环境变量
2020/02/20 Python
可视化pytorch 模型中不同BN层的running mean曲线实例
2020/06/24 Python
ReVive利维肤美国官网:RéVive Skincare
2018/04/18 全球购物
美国体育用品商店:Academy Sports + Outdoors
2020/01/04 全球购物
几个Linux面试题笔试题
2012/12/01 面试题
Python文件操作的面试题
2013/06/22 面试题
软件部经理岗位职责范本
2014/02/25 职场文书
文明美德伴我成长演讲稿
2014/05/12 职场文书
啤酒节策划方案
2014/05/28 职场文书
初中教师个人工作总结
2015/02/10 职场文书
学校通报表扬范文
2015/05/04 职场文书
《狼牙山五壮士》教学反思
2016/02/17 职场文书