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内置数据结构与操作符的练习题集锦
Jul 01 Python
Python列表推导式、字典推导式与集合推导式用法实例分析
Feb 07 Python
Python使用selenium实现网页用户名 密码 验证码自动登录功能
May 16 Python
Python图像处理之简单画板实现方法示例
Aug 30 Python
pycharm 配置远程解释器的方法
Oct 28 Python
对python中dict和json的区别详解
Dec 18 Python
python Gunicorn服务器使用方法详解
Jul 22 Python
pytorch中tensor张量数据类型的转化方式
Dec 31 Python
python输出第n个默尼森数的实现示例
Mar 08 Python
PyTorch加载自己的数据集实例详解
Mar 18 Python
2020版Python学习路线图(附学习资料)
Sep 15 Python
python 利用百度API识别图片文字(多线程版)
Dec 14 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
javascript showModalDialog,open取得父窗口的方法
2010/03/10 Javascript
js 自动播放的实例代码
2013/11/19 Javascript
Jjcarousellite 实现图片列表滚动的简单实例
2013/11/29 Javascript
元素未显示设置width/height时IE中使用currentStyle获取为auto
2014/05/04 Javascript
使用delegate方法为一个tr标签加一个链接
2014/06/27 Javascript
使用jQuery和Bootstrap实现多层、自适应模态窗口
2014/12/22 Javascript
JavaScript中Number.MAX_VALUE属性的使用方法
2015/06/04 Javascript
jQuery实现切换页面过渡动画效果
2015/10/29 Javascript
javascript先序遍历DOM树的方法
2016/02/27 Javascript
浅谈jQuery效果函数
2016/09/16 Javascript
jQuery图片切换动画效果
2017/02/28 Javascript
jQuery中$原理实例分析
2018/08/13 jQuery
vee-validate vue 2.0自定义表单验证的实例
2018/08/28 Javascript
vue组件文档(.md)中如何自动导入示例(.vue)详解
2019/01/25 Javascript
el-input 标签中密码的显示和隐藏功能的实例代码
2019/07/19 Javascript
vue eslint简要配置教程详解
2019/07/26 Javascript
重置Redux的状态数据的方法实现
2019/11/18 Javascript
js实现倒计时秒杀效果
2020/03/25 Javascript
js对象简介与基本用法示例
2020/03/13 Javascript
JS监听组合按键思路及实现过程
2020/04/17 Javascript
解决vue+webpack项目接口跨域出现的问题
2020/08/10 Javascript
Python实现把json格式转换成文本或sql文件
2015/07/10 Python
Python tkinter模块弹出窗口及传值回到主窗口操作详解
2017/07/28 Python
Python实现图片滑动式验证识别方法
2017/11/09 Python
Python使用Dijkstra算法实现求解图中最短路径距离问题详解
2018/05/16 Python
解决tensorflow测试模型时NotFoundError错误的问题
2018/07/26 Python
PyCharm+PySpark远程调试的环境配置的方法
2018/11/29 Python
Python中Subprocess的不同函数解析
2019/12/10 Python
销售行政专员职责
2014/01/03 职场文书
协议书范本
2014/04/23 职场文书
商场周年庆活动方案
2014/08/19 职场文书
大学考试作弊检讨书
2015/05/06 职场文书
十月围城观后感
2015/06/08 职场文书
PyQt5实现多张图片显示并滚动
2021/06/11 Python
Python实现简单的猜单词
2021/06/15 Python
python代码实现备忘录案例讲解
2021/07/26 Python