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跳出循环语句continue与break的区别
Aug 25 Python
python使用xlrd模块读取xlsx文件中的ip方法
Jan 11 Python
深入浅析python3中的unicode和bytes问题
Jul 03 Python
pandas的连接函数concat()函数的具体使用方法
Jul 09 Python
django 数据库 get_or_create函数返回值是tuple的问题
May 15 Python
python如何编写win程序
Jun 08 Python
Python 程序报错崩溃后如何倒回到崩溃的位置(推荐)
Jun 23 Python
如何卸载python插件
Jul 08 Python
python raise的基本使用
Sep 10 Python
pycharm无法导入lxml的解决办法
Mar 31 Python
教你怎么用Python处理excel实现自动化办公
Apr 30 Python
Python机器学习之基础概述
May 19 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类继承 extends使用介绍
2014/01/14 PHP
PHP单文件上传原理及上传函数的封装操作示例
2019/09/02 PHP
laravel框架模型、视图与控制器简单操作示例
2019/10/10 PHP
为Extjs加加速(javascript加速)
2010/08/19 Javascript
非html5实现js版弹球游戏示例代码
2013/09/22 Javascript
jQuery-1.9.1源码分析系列(十)事件系统之事件体系结构
2015/11/19 Javascript
Javascript基于AJAX回调函数传递参数实例分析
2015/12/15 Javascript
D3.js封装文本实现自动换行和旋转平移等功能
2016/10/14 Javascript
jQuery Easyui加载表格出错时在表格中间显示自定义的提示内容
2016/12/08 Javascript
浅谈javascript的url参数parse和build函数
2017/03/04 Javascript
利用JavaScript实现栈的数据结构示例代码
2017/08/02 Javascript
浅谈Vue.js 组件中的v-on绑定自定义事件理解
2017/11/17 Javascript
vue实现百度下拉列表交互操作示例
2019/03/12 Javascript
angular 服务随记小结
2019/05/06 Javascript
详解Vue前端生产环境发布配置实战篇
2019/05/07 Javascript
微信小程序实现简单文字跑马灯
2020/05/26 Javascript
js实现电灯开关效果
2021/01/19 Javascript
[00:35]DOTA2上海特级锦标赛 VP战队宣传片
2016/03/04 DOTA
[39:00]Optic vs VP 2018国际邀请赛淘汰赛BO3 第三场 8.24
2018/08/25 DOTA
python通过urllib2爬网页上种子下载示例
2014/02/24 Python
跟老齐学Python之玩转字符串(1)
2014/09/14 Python
基于python(urlparse)模板的使用方法总结
2017/10/13 Python
python版本单链表实现代码
2018/09/28 Python
使用python根据端口号关闭进程的方法
2018/11/06 Python
详解Python下载图片并保存本地的两种方式
2019/05/15 Python
浅谈Python类中的self到底是干啥的
2019/11/11 Python
Python递归及尾递归优化操作实例分析
2020/02/01 Python
美国女性服饰销售网站:Nasty Gal(坏女孩)
2016/07/26 全球购物
精伦电子Java笔试题
2013/01/16 面试题
学校联谊协议书
2014/09/16 职场文书
群众路线班子对照检查材料
2014/09/25 职场文书
学习作风建设心得体会
2014/10/22 职场文书
加强干部作风建设整改方案
2014/10/24 职场文书
2014年小学英语教师工作总
2014/12/03 职场文书
中学生社区服务活动报告
2015/02/05 职场文书
实名检举信范文
2015/03/02 职场文书