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使用scrapy采集数据过程中放回下载过大页面的方法
Apr 08 Python
在Django的上下文中设置变量的方法
Jul 20 Python
Python实现堆排序的方法详解
May 03 Python
Python多线程实现同步的四种方式
May 02 Python
Python的地形三维可视化Matplotlib和gdal使用实例
Dec 09 Python
对Python字符串中的换行符和制表符介绍
May 03 Python
django中ORM模型常用的字段的使用方法
Mar 05 Python
Django中使用session保持用户登陆连接的例子
Aug 06 Python
对python while循环和双重循环的实例详解
Aug 23 Python
python tkinter图形界面代码统计工具
Sep 18 Python
Python文件路径名的操作方法
Oct 30 Python
OpenCV图片漫画效果的实现示例
Aug 18 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
2006/10/09 PHP
php获取url字符串截取路径的文件名和扩展名的函数
2010/01/22 PHP
PHP常用开发函数解析之数组篇[未完结]
2012/07/30 PHP
解析PHP中如何将数组变量写入文件
2013/06/06 PHP
PHP+jquery+CSS制作头像登录窗(仿QQ登陆)
2016/10/20 PHP
利用PHP访问带有密码的Redis方法示例
2017/02/09 PHP
PHP调用API接口实现天气查询功能的示例
2017/09/21 PHP
php设计模式之职责链模式实例分析【星际争霸游戏案例】
2020/03/27 PHP
asp.net刷新本页面的六种方法总结
2014/01/07 Javascript
jquery实现弹出层遮罩效果的简单实例
2014/03/03 Javascript
浅析JavaScript基本类型与引用类型
2014/05/28 Javascript
javascript检测浏览器的缩放状态实现代码
2014/09/28 Javascript
jquery跟随屏幕滚动效果的实现代码
2016/04/13 Javascript
完美实现js焦点轮播效果(一)
2017/03/07 Javascript
DataTables添加额外的查询参数和删除columns等无用参数实例
2017/07/04 Javascript
Angular浏览器插件Batarang介绍及使用
2018/02/07 Javascript
浅谈对于react-thunk中间件的简单理解
2019/05/01 Javascript
[55:02]2014 DOTA2国际邀请赛中国区预选赛 HGT VS Orenda
2014/05/21 DOTA
[38:32]完美世界DOTA2联赛循环赛 Forest vs DM 第二场 11.06
2020/11/06 DOTA
Python中的闭包总结
2014/09/18 Python
利用Python实现图书超期提醒
2016/08/02 Python
TensorFlow实现卷积神经网络CNN
2018/03/09 Python
Python numpy 提取矩阵的某一行或某一列的实例
2018/04/03 Python
使用pandas中的DataFrame数据绘制柱状图的方法
2018/04/10 Python
Python获取一个用户名的组ID过程解析
2019/09/03 Python
浅析Python+OpenCV使用摄像头追踪人脸面部血液变化实现脉搏评估
2019/10/17 Python
Python实现i人事自动打卡的示例代码
2020/01/09 Python
tensorflow 实现打印pb模型的所有节点
2020/01/23 Python
python IP地址转整数
2020/11/20 Python
6种非常炫酷的CSS3按钮边框动画特效
2016/03/16 HTML / CSS
One.com挪威:北欧成长最快的网络托管公司
2016/11/19 全球购物
赫里福德的一家乡村零售商店:Philip Morris & Son
2017/06/25 全球购物
大学毕业生简单自荐信
2013/11/05 职场文书
公司离职证明范本
2014/01/13 职场文书
助人为乐好少年事迹材料
2014/08/18 职场文书
2015年百日安全活动总结
2015/03/26 职场文书