BrokenPipeError

项目场景:

之前碰到过的一个问题:1亿个整型数据,进行排序。我本来打算用几种排序算法试试看它们的处理时间,结果需要打印出来。


问题描述

完成排序后,将排序结果打印时出现error。

BrokenPipeError: [Errno 32] Broken pipe

堆排序算法及主函数如下

import time
from functools import wraps
import numpy as np

def Decorator(func):
    @wraps(func)
    def runtime(*args, **kwargs):
        begin = time.time()
        func(*args, **kwargs)
        end = time.time()
        print("{} fuction's runtime is :{}".format(func,end-begin))
    return runtime
def BuildMaxHeap(array, length):
    # 建立大根堆
    for i in range(length//2, 0, -1):
        HeadAdjust(array, i, length)
def HeadAdjust(array, k, length):
    # 将元素k为根的子树进行调整
    temp = array[k]
    i = 2*k
    while i<=length:
        if i<length and array[i] < array[i+1]:
            i += 1
        if temp > array[i]:
            break
        else:
            array[k] = array[i]
            k = i
        i *= 2
    array[k] = temp
@Decorator
def Heap_sort(array,length):
    # 堆排序
    # 将list元素整体后移一位
    array.append(0)
    for i in range(length-1,-1,-1):
        array[i+1] = array[i]

    BuildMaxHeap(array,length) # 构建初始堆
    for i in range(length,1,-1):
        array[i], array[1] = array[1], array[i] # 输出堆顶元素
        HeadAdjust(array,1,i-1) # 调整

    # 将list元素整体向前移一位
    for i in range(length):
        array[i] = array[i+1]
    array.pop() # 删除末尾元素

if __name__ == "__main__":
	array = list(np.random.randint(0,10000000,100000000))
	Heap_sort(array,len(array))
    print("Head_sort is :",array)

原因分析:

Broken pipe 错误,初步判断,应该是进程之间通信的管道容量不够大,数据溢出。这里有1亿个整型数据,整个大小为400MB。


解决方案:

最直接的法子,写入文件或者日志。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值