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抓取Discuz!用户名脚本代码
Dec 30 Python
Python与R语言的简要对比
Nov 14 Python
Python实现的用户登录系统功能示例
Feb 05 Python
python 中的list和array的不同之处及转换问题
Mar 13 Python
matlab中实现矩阵删除一行或一列的方法
Apr 04 Python
pandas 使用apply同时处理两列数据的方法
Apr 20 Python
Python实现根据日期获取当天凌晨时间戳的方法示例
Apr 09 Python
简单了解python 生成器 列表推导式 生成器表达式
Aug 22 Python
Django--权限Permissions的例子
Aug 28 Python
Pycharm 2020.1 版配置优化的详细教程
Aug 07 Python
python selenium xpath定位操作
Sep 01 Python
Python自动化实战之接口请求的实现
May 30 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树-不需要递归的实现方法
2016/06/21 PHP
PHP5.5基于mysqli连接MySQL数据库和读取数据操作实例详解
2019/02/16 PHP
jQuery-ui中自动完成实现方法
2010/06/10 Javascript
jquery实现鼠标经过显示下划线的渐变下拉菜单效果代码
2015/08/24 Javascript
jQuery根据表单name获取值的方法
2016/05/24 Javascript
bootstrap table分页模板和获取表中的ID方法
2017/01/10 Javascript
bootstrap的工具提示实例代码
2017/05/17 Javascript
使用puppeteer破解极验的滑动验证码
2018/02/24 Javascript
JS实现字符串中去除指定子字符串方法分析
2018/05/17 Javascript
浅谈webpack性能榨汁机(打包速度优化)
2019/01/09 Javascript
iview tabs 顶部导航栏和模块切换栏的示例代码
2019/03/04 Javascript
微信小程序class封装http代码实例
2019/08/24 Javascript
javascript数组的定义及操作实例
2019/11/10 Javascript
不刷新网页就能链接新的js文件方法总结
2020/03/01 Javascript
vue实现下载文件流完整前后端代码
2020/11/17 Vue.js
python将人民币转换大写的脚本代码
2013/02/10 Python
python简单实现基数排序算法
2015/05/16 Python
实例解析Python设计模式编程之桥接模式的运用
2016/03/02 Python
Python字符串和字典相关操作的实例详解
2017/09/23 Python
pandas去除重复列的实现方法
2019/01/29 Python
python区块及区块链的开发详解
2019/07/03 Python
flask框架路由常用定义方式总结
2019/07/23 Python
详解python3中用HTMLTestRunner.py报ImportError: No module named 'StringIO'如何解决
2019/08/27 Python
Python 复平面绘图实例
2019/11/21 Python
python不同版本的_new_不同点总结
2020/12/09 Python
css3的transform造成z-index无效解决方案
2014/12/04 HTML / CSS
以实惠的价格轻松租车,免费取消:Easyrentcars
2019/07/16 全球购物
客服实习的个人自我鉴定
2013/10/20 职场文书
自我鉴定三原则
2014/01/13 职场文书
致100米运动员广播稿
2014/02/14 职场文书
应届毕业生如何写求职信
2014/02/16 职场文书
企业办公室岗位职责
2014/03/12 职场文书
学校感恩节活动策划方案
2014/10/06 职场文书
学校教师培训工作总结
2015/10/14 职场文书
python实现的web监控系统
2021/04/27 Python
Python绘画好看的星空图
2022/03/17 Python