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实现提取文章摘要的方法
Apr 21 Python
Python3一行代码实现图片文字识别的示例
Jan 15 Python
Django实现组合搜索的方法示例
Jan 23 Python
Python OpenCV之图片缩放的实现(cv2.resize)
Jun 28 Python
Python hmac模块使用实例解析
Dec 24 Python
python 实现从高分辨图像上抠取图像块
Jan 02 Python
python tkinter之顶层菜单、弹出菜单实例
Mar 04 Python
Jupyter Notebook 实现正常显示中文和负号
Apr 24 Python
浅谈pymysql查询语句中带有in时传递参数的问题
Jun 05 Python
爬虫代理的cookie如何生成运行
Sep 22 Python
Python pymysql模块安装并操作过程解析
Oct 13 Python
Python+OpenCV实现图片中的圆形检测
Apr 07 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多个文件及图片上传实例详解
2014/11/10 PHP
PHP实现获取文件后缀名的几种常用方法
2015/08/08 PHP
再推荐十款免费的php开发工具
2015/11/09 PHP
thinkPHP多域名情况下使用memcache方式共享session数据的实现方法
2016/07/21 PHP
thinkPHP5分页功能实现方法分析
2017/10/25 PHP
php7 list()、session及其他模块的修改实例分析
2020/05/25 PHP
才发现的超链接js导致网页中GIF动画停止的解决方法
2007/11/02 Javascript
Mootools 1.2教程 选项卡效果(Tabs)
2009/09/15 Javascript
比较搞笑的js陷阱题
2010/02/07 Javascript
理解Javascript_05_原型继承原理
2010/10/13 Javascript
jquery使用remove()方法删除指定class子元素
2015/03/26 Javascript
有关Promises异步问题详解
2015/11/13 Javascript
详解js私有作用域中创建特权方法
2016/01/25 Javascript
分享一个插件实现水珠自动下落效果
2016/06/01 Javascript
扩展jquery easyui tree的搜索树节点方法(推荐)
2016/10/28 Javascript
AngularJS指令中的绑定策略实例分析
2016/12/14 Javascript
利用angularjs1.4制作的简易滑动门效果
2017/02/28 Javascript
详解webpack 多页面/入口支持&amp;公共组件单独打包
2017/06/29 Javascript
JS实现表单中点击小眼睛显示隐藏密码框中的密码
2020/04/13 Javascript
JSON stringify方法原理及实例解析
2020/10/23 Javascript
JavaScript 如何在浏览器中使用摄像头
2020/12/02 Javascript
python模拟登录百度代码分享(获取百度贴吧等级)
2013/12/27 Python
Python程序设计入门(5)类的使用简介
2014/06/16 Python
举例讲解Linux系统下Python调用系统Shell的方法
2015/11/07 Python
Python定时发送消息的脚本:每天跟你女朋友说晚安
2018/10/21 Python
解决python3运行selenium下HTMLTestRunner报错的问题
2018/12/27 Python
使用PyQt4 设置TextEdit背景的方法
2019/06/14 Python
Python @property使用方法解析
2019/09/17 Python
如何运行带参数的python脚本
2019/11/15 Python
简单介绍django提供的加密算法
2019/12/18 Python
英国旅行箱包和行李箱购物网站:Travel Luggage & Cabin Bags
2019/08/26 全球购物
一套Java笔试题
2016/08/20 面试题
Can a struct inherit from another struct? (结构体能继承结构体吗)
2016/09/25 面试题
运动会解说词100字
2014/01/31 职场文书
工作经常出错的检讨书
2014/09/13 职场文书
11.9消防日宣传标语
2014/10/08 职场文书