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字符串替换的2种方法
Nov 30 Python
详谈python http长连接客户端
Jun 12 Python
Python3之读取连接过的网络并定位的方法
Apr 22 Python
Python+selenium 获取浏览器窗口坐标、句柄的方法
Oct 14 Python
Python爬取成语接龙类网站
Oct 19 Python
python pandas读取csv后,获取列标签的方法
Nov 12 Python
浅谈python下含中文字符串正则表达式的编码问题
Dec 07 Python
Python 从一个文件中调用另一个文件的类方法
Jan 10 Python
django mysql数据库及图片上传接口详解
Jul 18 Python
pymysql 插入数据 转义处理方式
Mar 02 Python
Opencv图像处理:如何判断图片里某个颜色值占的比例
Jun 03 Python
Python制作运行进度条的实现效果(代码运行不无聊)
Feb 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
蝙蝠侠:侠影之谜
2020/03/04 欧美动漫
php注销代码(session注销)
2012/05/31 PHP
PHP小教程之实现链表
2014/06/09 PHP
Linux环境下php实现给网站截图的方法
2016/05/03 PHP
微信 开发生成带参数的二维码的实例
2016/11/23 PHP
php使用mysqli和pdo扩展,测试对比mysql数据库的执行效率完整示例
2019/05/09 PHP
php多进程应用场景实例详解
2019/07/22 PHP
javascript 在firebug调试时用console.log的方法
2012/05/10 Javascript
Javascript中的关键字和保留字整理
2014/10/16 Javascript
理解javascript中Map代替循环
2016/02/26 Javascript
jQuery使用ajax跨域获取数据的简单实例
2016/05/18 Javascript
jQuery插件实现文件上传功能(支持拖拽)
2020/08/27 Javascript
20分钟打造属于你的Bootstrap站点
2016/07/27 Javascript
微信端开发--登录小程序步骤
2017/01/11 Javascript
分分钟玩转Vue.js组件(二)
2017/03/01 Javascript
javascript数据结构之串的概念与用法分析
2017/04/12 Javascript
jQuery EasyUI的TreeGrid查询功能实现方法
2017/08/08 jQuery
简单谈谈CommonsChunkPlugin抽取公共模块
2017/12/31 Javascript
vue 项目软键盘回车触发搜索事件
2020/09/09 Javascript
JS创建自定义对象的六种方法总结
2020/12/15 Javascript
vue实现树状表格效果
2020/12/29 Vue.js
Python操作RabbitMQ服务器实现消息队列的路由功能
2016/06/29 Python
Python如何获得百度统计API的数据并发送邮件示例代码
2019/01/27 Python
关于python多重赋值的小问题
2019/04/17 Python
整理的15个非常有用的 HTML5 开发教程和速查手册
2011/10/18 HTML / CSS
HTML5 placeholder(空白提示)属性介绍
2013/08/07 HTML / CSS
HTML5 manifest离线缓存的示例代码
2018/08/08 HTML / CSS
中医药大学市场营销专业自荐信
2013/09/29 职场文书
大学生自我评价怎样写好
2013/10/23 职场文书
学校募捐倡议书
2014/05/14 职场文书
师德师风剖析材料
2014/09/30 职场文书
办公室主任岗位职责
2015/01/31 职场文书
销售人员管理制度
2015/08/06 职场文书
营销策划分析:怎么策划才能更好销量产品?
2019/09/04 职场文书
JS新手入门数组处理的实用方法汇总
2021/04/07 Javascript
浅析Python OpenCV三种滤镜效果
2022/04/11 Python