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 文件操作技巧(File operation) 实例代码分析
Aug 11 Python
python利用dir函数查看类中所有成员函数示例代码
Sep 08 Python
python检索特定内容的文本文件实例
Jun 05 Python
Python发送邮件测试报告操作实例详解
Dec 08 Python
Django实现一对多表模型的跨表查询方法
Dec 18 Python
Python 实现微信防撤回功能
Apr 29 Python
python3的print()函数的用法图文讲解
Jul 16 Python
Python3中configparser模块读写ini文件并解析配置的用法详解
Feb 18 Python
PyCharm License Activation激活码失效问题的解决方法(图文详解)
Mar 12 Python
Python-jenkins 获取job构建信息方式
May 12 Python
OpenCV实现机器人对物体进行移动跟随的方法实例
Nov 09 Python
pytorch交叉熵损失函数的weight参数的使用
May 24 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
APMServ使用说明
2006/10/23 PHP
php桌面中心(二) 数据库写入
2007/03/11 PHP
PHP和JavaScrip分别获取关联数组的键值示例代码
2013/09/16 PHP
PHP中使用sleep函数实现定时任务实例分享
2014/08/21 PHP
PHP设计模式之抽象工厂模式实例分析
2019/03/25 PHP
浅析js中的浮点型运算问题
2014/01/06 Javascript
利用浏览器全屏api实现js全屏
2014/01/16 Javascript
jquery分页插件jpaginate在IE中不兼容问题
2014/04/22 Javascript
从数据库读取数据后将其输出成html标签的三种方法
2014/10/13 Javascript
jQuery实现模拟marquee标签效果
2015/07/14 Javascript
聊一聊JS中this的指向问题
2016/06/17 Javascript
AngularJS基础 ng-cloak 指令简单示例
2016/08/01 Javascript
jq实现左滑显示删除按钮,点击删除实现删除数据功能(推荐)
2016/08/23 Javascript
bootstrap fileinput组件整合Springmvc上传图片到本地磁盘
2017/05/11 Javascript
vue 项目常用加载器及配置详解
2018/01/22 Javascript
基于vue.js无缝滚动效果
2018/01/25 Javascript
Node+OCR实现图像文字识别功能
2018/11/26 Javascript
Vue中CSS动画原理的实现
2019/02/13 Javascript
基于vue+axios+lrz.js微信端图片压缩上传方法
2019/06/25 Javascript
vscode+gulp轻松开发小程序的完整步骤
2020/10/18 Javascript
[49:29]LGD vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
[42:23]完美世界DOTA2联赛PWL S3 Forest vs Rebirth 第二场 12.10
2020/12/13 DOTA
查看Python安装路径以及安装包路径小技巧
2015/04/28 Python
Python yield 使用浅析
2015/05/28 Python
深入讲解Python中的迭代器和生成器
2015/10/26 Python
Python SQL查询并生成json文件操作示例
2018/08/17 Python
python实现按关键字筛选日志文件
2019/12/24 Python
如何表示python中的相对路径
2020/07/08 Python
我有一个char * 型指针正巧指向一些int 型变量, 我想跳过它们。 为什么如下的代码((int *)p)++; 不行?
2013/05/09 面试题
GWT的应用有哪两种部署模式
2012/12/21 面试题
应届电子商务毕业自荐书范文
2014/02/11 职场文书
学生会竞选演讲稿学习部
2014/08/25 职场文书
群众路线自查自纠工作情况报告
2014/10/28 职场文书
十岁生日答谢词
2015/01/05 职场文书
中秋节英文祝福语句(14句)
2019/09/11 职场文书
DIY胆机必读:各国电子管评价
2022/04/06 无线电