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多线程编程(一):threading模块综述
Apr 05 Python
python 数据的清理行为实例详解
Jul 12 Python
解决python 输出是省略号的问题
Apr 19 Python
python实现推箱子游戏
Mar 25 Python
python贪吃蛇游戏代码
Apr 18 Python
pycharm配置当鼠标悬停时快速提示方法参数
Jul 31 Python
python中使用while循环的实例
Aug 05 Python
Django choices下拉列表绑定实例
Mar 13 Python
python如何操作mysql
Aug 17 Python
django有哪些好处和优点
Sep 01 Python
15款Python编辑器的优缺点,别再问我“选什么编辑器”啦
Oct 19 Python
python执行js代码的方法
May 13 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
mysql5写入和读出乱码解决
2006/11/25 PHP
echo, print, printf 和 sprintf 区别
2006/12/06 PHP
PHP提取字符串中的图片地址[正则表达式]
2011/11/12 PHP
php中0,null,empty,空,false,字符串关系的详细介绍
2013/06/20 PHP
windows7配置Nginx+php+mysql的详细教程
2016/09/04 PHP
PHP children()函数讲解
2019/02/03 PHP
wordpress自定义标签云与随机获取标签的方法详解
2019/03/22 PHP
深入理解JavaScript系列(2) 揭秘命名函数表达式
2012/01/15 Javascript
jQuery筛选器children()案例详解(图文)
2013/02/17 Javascript
jquery与js函数冲突的两种解决方法
2013/09/09 Javascript
父页面显示遮罩层弹出半透明状态的dialog
2014/03/04 Javascript
JavaScript截断字符串的方法
2015/07/15 Javascript
jQuery入门之层次选择器实例简析
2015/12/11 Javascript
javascript匀速运动实现方法分析
2016/01/08 Javascript
浅谈javascript中的数据类型转换
2016/12/27 Javascript
React-intl 实现多语言的示例代码
2017/11/03 Javascript
vue init webpack myproject构建项目 ip不能访问的解决方法
2018/03/20 Javascript
Ajax请求时无法重定向的问题解决代码详解
2019/06/21 Javascript
layui table设置某一行的字体颜色方法
2019/09/05 Javascript
vue+elementui 对话框取消 表单验证重置示例
2019/10/29 Javascript
JS实现可视化音频效果的实例代码
2020/01/16 Javascript
[01:02:25]2014 DOTA2华西杯精英邀请赛 5 24 iG VS DK
2014/05/26 DOTA
Python实现的一个找零钱的小程序代码分享
2014/08/25 Python
Python中使用异常处理来判断运行的操作系统平台方法
2015/01/22 Python
对python中的logger模块全面讲解
2018/04/28 Python
Python3.6.0+opencv3.3.0人脸检测示例
2018/05/25 Python
Python实现使用request模块下载图片demo示例
2019/05/24 Python
Flask框架钩子函数功能与用法分析
2019/08/02 Python
Django 源码WSGI剖析过程详解
2019/08/05 Python
Python使用tkinter模块实现推箱子游戏
2019/10/08 Python
python 和c++实现旋转矩阵到欧拉角的变换方式
2019/12/04 Python
Python安装第三方库攻略(pip和Anaconda)
2020/10/15 Python
利用python实现汉诺塔游戏
2021/03/01 Python
美国最大的宠物药店:1-800-PetMeds
2016/10/02 全球购物
科颜氏英国官网:Kiehl’s英国
2019/11/20 全球购物
DIV CSS实现网页背景半透明效果
2021/12/06 HTML / CSS