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写xml文件的操作实例
Oct 05 Python
在主机商的共享服务器上部署Django站点的方法
Jul 22 Python
Python制作简易注册登录系统
Dec 15 Python
python爬虫实现教程转换成 PDF 电子书
Feb 19 Python
Python3内置模块pprint让打印比print更美观详解
Jun 02 Python
python字符串Intern机制详解
Jul 01 Python
Python获取好友地区分布及好友性别分布情况代码详解
Jul 10 Python
Pytorch 的损失函数Loss function使用详解
Jan 02 Python
Django admin管理工具TabularInline类用法详解
May 14 Python
获取CSDN文章内容并转换为markdown文本的python
Sep 06 Python
详解java调用python的几种用法(看这篇就够了)
Dec 10 Python
PyQt5通过信号实现MVC的示例
Feb 06 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
咖啡豆的最常见发酵处理方法,详细了解一下
2021/03/03 冲泡冲煮
php Smarty模板生成html文档的方法
2010/04/12 PHP
通过php删除xml文档内容的方法
2015/01/23 PHP
Yii框架Session与Cookie使用方法示例
2019/10/14 PHP
Stop SQL Server
2007/06/21 Javascript
JavaScript和ActionScript的交互实现代码
2010/08/01 Javascript
始终在屏幕中间显示Div的代码(css+js)
2011/03/10 Javascript
由JavaScript中call()方法引发的对面向对象继承机制call的思考
2011/09/12 Javascript
javascript 获取网页标题代码实例
2014/01/22 Javascript
angularJS 中input示例分享
2015/02/09 Javascript
jquery左右全屏大尺寸多图滑动效果代码分享
2015/08/28 Javascript
详解Node.js 命令行程序开发教程
2017/06/07 Javascript
JS中type=&quot;button&quot;和type=&quot;submit&quot;的区别
2017/07/04 Javascript
jquery实现限制textarea输入字数的方法
2017/09/06 jQuery
浅谈Node Inspector 代理实现
2017/10/19 Javascript
除Console.log()外更多的Javascript调试命令
2018/01/24 Javascript
详解@Vue/Cli 3 Invalid Host header 错误解决办法
2019/01/02 Javascript
利用Fn.py库在Python中进行函数式编程
2015/04/22 Python
浅谈python编译pyc工程--导包问题解决
2019/03/20 Python
Python openpyxl读取单元格字体颜色过程解析
2019/09/03 Python
解决jupyter notebook 前面书写后面内容消失的问题
2020/04/13 Python
Python drop方法删除列之inplace参数实例
2020/06/27 Python
PyChon中关于Jekins的详细安装(推荐)
2020/12/28 Python
iHerb香港:维生素、补充剂和天然保健品
2017/08/01 全球购物
什么是触发器(trigger)? 触发器有什么作用?
2013/09/18 面试题
新媒传信软件测试面试题
2013/02/24 面试题
秋季运动会广播稿
2014/02/22 职场文书
优秀员工评优方案
2014/06/13 职场文书
我的中国梦演讲稿初中篇
2014/08/19 职场文书
校运动会广播稿300字
2014/10/07 职场文书
2014年小学教学工作总结
2014/11/13 职场文书
2014年学校后勤工作总结
2014/12/06 职场文书
向雷锋同志学习倡议书
2015/04/27 职场文书
2015年市场营销工作总结
2015/07/23 职场文书
2015年公司中秋节致辞
2015/07/31 职场文书
大学体育课感想
2015/08/10 职场文书