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 struct模块解析
Jun 12 Python
用实例分析Python中method的参数传递过程
Apr 02 Python
python中lambda与def用法对比实例分析
Apr 30 Python
为Python的Tornado框架配置使用Jinja2模板引擎的方法
Jun 30 Python
Python IDLE入门简介
Dec 08 Python
python筛选出两个文件中重复行的方法
May 31 Python
python创建文件时去掉非法字符的方法
Oct 31 Python
python-django中的APPEND_SLASH实现方法
Jun 21 Python
简单了解python单例模式的几种写法
Jul 01 Python
Python字符串hashlib加密模块使用案例
Mar 10 Python
Python 解析库json及jsonpath pickle的实现
Aug 17 Python
浅谈Python描述数据结构之KMP篇
Sep 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
谈谈新手如何学习PHP
2006/12/14 PHP
CakePHP去除默认显示的标题及图标的方法
2008/10/22 PHP
php-cli简介(不会Shell语言一样用Shell)
2013/06/03 PHP
PHP基础知识介绍
2013/09/17 PHP
php文件服务实现虚拟挂载其他目录示例
2014/04/17 PHP
thinkphp浏览历史功能实现方法
2014/10/29 PHP
php保存任意网络图片到服务器的方法
2015/04/14 PHP
php技术实现加载字体并保存成图片
2015/07/27 PHP
Laravel框架模板加载,分配变量及简单路由功能示例
2018/06/11 PHP
详解Laravel设置多态关系模型别名的方式
2019/10/17 PHP
JavaScript OOP类与继承
2009/11/15 Javascript
jQuery 跨域访问问题解决方法
2009/12/02 Javascript
jquery星级插件、支持页面中多次使用
2012/03/25 Javascript
JavaScript验证电子邮箱的函数
2014/08/22 Javascript
jQuery实现Twitter的自动文字补齐特效
2014/11/28 Javascript
webpack中引用jquery的简单实现
2016/06/08 Javascript
Javascript 两种刷新方法以及区别和适用范围
2017/01/17 Javascript
Angular中使用$watch监听object属性值的变化(详解)
2017/04/24 Javascript
Angular.js自动化测试之protractor详解
2017/07/07 Javascript
vue.js移动端app之上拉加载以及下拉刷新实战
2017/09/11 Javascript
详解如何在项目中使用jest测试react native组件
2018/02/09 Javascript
微信小程序利用Canvas绘制图片和竖排文字详解
2019/06/25 Javascript
[05:20]卡尔工作室_DOTA2新手教学_DOTA2超强新手功能
2013/04/22 DOTA
python logging日志模块的详解
2017/10/29 Python
python:print格式化输出到文件的实例
2018/05/14 Python
局域网内python socket实现windows与linux间的消息传送
2019/04/19 Python
python定义类self用法实例解析
2020/01/22 Python
python实现定时发送邮件到指定邮箱
2020/12/23 Python
美国最大的船只买卖在线市场:Boat Trader
2018/08/04 全球购物
英国领先的在线高尔夫设备零售商:Golfgeardirect
2020/12/11 全球购物
经理职责范文
2013/11/08 职场文书
企划主管岗位职责
2013/12/12 职场文书
纠风工作实施方案
2014/03/15 职场文书
大学新生军训自我鉴定
2014/03/18 职场文书
CentOS安装Nginx并部署vue
2022/04/12 Servers
Grafana可视化监控系统结合SpringBoot使用
2022/04/19 Redis