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中使用pyhook实现键盘监控的例子
Jul 18 Python
Python计算字符宽度的方法
Jun 14 Python
Python使用迭代器捕获Generator返回值的方法
Apr 05 Python
浅析python递归函数和河内塔问题
Apr 18 Python
利用python如何处理百万条数据(适用java新手)
Jun 06 Python
Python使用googletrans报错的解决方法
Sep 25 Python
python  Django中的apps.py的目的是什么
Oct 15 Python
python实现简易学生信息管理系统
Apr 05 Python
python3.7通过thrift操作hbase的示例代码
Jan 14 Python
python3获取控制台输入的数据的具体实例
Aug 16 Python
如何让PyQt5中QWebEngineView与JavaScript交互
Oct 21 Python
Python趣味挑战之给幼儿园弟弟生成1000道算术题
May 28 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中static静态变量的使用方法详解
2010/06/04 PHP
php+mysql数据库实现无限分类的方法
2014/12/12 PHP
php实现zip文件解压操作
2015/11/03 PHP
php关闭warning问题的解决方法
2016/05/17 PHP
js弹出框轻量级插件jquery.boxy使用介绍
2013/01/15 Javascript
JavaScript语言核心数据类型和变量使用介绍
2013/08/23 Javascript
js中function()使用方法
2013/12/24 Javascript
如何设置一定时间内只能发送一次请求
2014/02/28 Javascript
jQuery中hasClass()方法用法实例
2015/01/06 Javascript
javascript删除数组重复元素的方法汇总
2015/06/24 Javascript
使用bootstrap typeahead插件实现输入框自动补全之问题及解决办法
2016/07/07 Javascript
vue实现可增删查改的成绩单
2016/10/27 Javascript
关于JS Lodop打印插件打印Bootstrap样式错乱问题的解决方案
2016/12/23 Javascript
Node.js通过身份证号验证年龄、出生日期与性别方法示例
2017/03/09 Javascript
jquery.masonry瀑布流效果
2017/05/25 jQuery
layui 中select下拉change事件失效的解决方法
2019/09/20 Javascript
javascript实现弹幕墙效果
2019/11/28 Javascript
微信小程序实现翻牌抽奖动画
2020/09/21 Javascript
[36:14]DOTA2上海特级锦标赛D组小组赛#1 EG VS COL第二局
2016/02/28 DOTA
python多线程编程中的join函数使用心得
2014/09/02 Python
数据挖掘之Apriori算法详解和Python实现代码分享
2014/11/07 Python
Python实现数据库编程方法详解
2015/06/09 Python
Python 多进程并发操作中进程池Pool的实例
2017/11/01 Python
Python AES加密实例解析
2018/01/18 Python
python 删除列表里所有空格项的方法总结
2018/04/18 Python
flask框架视图函数用法示例
2018/07/19 Python
Android Q之气泡弹窗的实现示例
2020/06/23 Python
python模拟点击在ios中实现的实例讲解
2020/11/26 Python
python 第三方库paramiko的常用方式
2021/02/20 Python
美国电视购物:QVC
2017/02/06 全球购物
优衣库美国官网:UNIQLO美国
2018/04/14 全球购物
人事部经理岗位职责
2014/03/07 职场文书
主持词开场白
2014/03/17 职场文书
青年文明号服务承诺
2014/03/31 职场文书
爱情寄语大全
2014/04/09 职场文书
公司建议书怎么写
2014/05/15 职场文书