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 相关文章推荐
easy_install python包安装管理工具介绍
Feb 10 Python
在Linux系统上安装Python的Scrapy框架的教程
Jun 11 Python
Python基本语法经典教程
Mar 11 Python
python+django+rest框架配置创建方法
Aug 31 Python
python线程定时器Timer实现原理解析
Nov 30 Python
Python调用钉钉自定义机器人的实现
Jan 03 Python
对tensorflow中tf.nn.conv1d和layers.conv1d的区别详解
Feb 11 Python
Python趣味实例,实现一个简单的抽奖刮刮卡
Jul 18 Python
Python实现王者荣耀自动刷金币的完整步骤
Jan 22 Python
python lambda的使用详解
Feb 26 Python
python 求两个向量的顺时针夹角操作
Mar 04 Python
Python matplotlib 利用随机函数生成变化图形
Apr 26 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 开发环境配置(测试开发环境)
2010/04/28 PHP
Linux下PHP加速器APC的安装与配置笔记
2014/10/24 PHP
PHP检查URL包含特定字符串实例方法
2019/02/11 PHP
JavaScript使用prototype定义对象类型
2007/02/07 Javascript
JavaScript判断两种格式的输入日期的正确性的代码
2007/03/25 Javascript
Js获取事件对象代码
2010/08/05 Javascript
javascript oop开发滑动(slide)菜单控件
2010/08/25 Javascript
jQuery插件zoom实现图片全屏放大弹出层特效
2015/04/15 Javascript
javascript实现rgb颜色转换成16进制格式
2015/07/10 Javascript
使用vue与jquery实时监听用户输入状态的操作代码
2017/09/19 jQuery
mpvue中配置vuex并持久化到本地Storage图文教程解析
2018/03/15 Javascript
微信小程序 高德地图路线规划实现过程详解
2019/08/05 Javascript
vue keep-alive列表页缓存 详情页返回上一页不刷新,定位到之前位置
2019/11/26 Javascript
vue-cli创建的项目中的gitHooks原理解析
2020/02/14 Javascript
[02:43]DOTA2亚洲邀请赛场馆攻略——带你走进东方体育中心
2018/03/19 DOTA
Python3利用SMTP协议发送E-mail电子邮件的方法
2017/09/30 Python
使用Python快速制作可视化报表的方法
2019/02/03 Python
python调用接口的4种方式代码实例
2019/11/19 Python
浅谈python3打包与拆包在函数的应用详解
2020/05/02 Python
django自带的权限管理Permission用法说明
2020/05/13 Python
Pytorch使用PIL和Numpy将单张图片转为Pytorch张量方式
2020/05/25 Python
python获得命令行输入的参数的两种方式
2020/11/02 Python
HTML5实现动画效果的方式汇总
2016/02/29 HTML / CSS
计算机专业学生求职信分享
2013/12/15 职场文书
2014年高三毕业生自我评价
2014/01/11 职场文书
学校政风行风自查自纠报告
2014/10/21 职场文书
教师党的群众路线学习心得体会
2014/11/04 职场文书
男方婚礼答谢词
2015/01/20 职场文书
长江三峡导游词
2015/01/31 职场文书
小学元宵节活动总结
2015/02/06 职场文书
2015年上半年计生工作总结
2015/03/30 职场文书
幼儿教师继续教育培训心得体会
2016/01/19 职场文书
小程序实现筛子抽奖
2021/05/26 Javascript
关于python pygame游戏进行声音添加的技巧
2021/10/24 Python
Spring事务管理下synchronized锁失效问题的解决方法
2022/03/31 Java/Android
MySQL表字段数量限制及行大小限制详情
2022/07/23 MySQL