python多线程“超过最大递归深度”

2023-12-05

我使用Python多线程来实现快速排序。 快速排序是在函数中实现的。它是一个递归函数。 每个线程调用 Quicksort 对其拥有的数组进行排序。每个线程都有自己的数组,用于存储需要排序的数字。 如果数组大小较小 (

def partition (array, p, r):
    x = array[r]
    i = (p-1)
    j = p
    while (1):
        if array[j] <= x:
            i = (i+1)
            temp = array[j]
            array[j] = array[i]
            array[i] = temp
        j+=1
        if j == r:
            break
    temp = array[i+1]
    array[i+1] = array[r]
    array[r] = temp
    return i+1

def quicksort (array, p, r):
    if p < r:
        q = partition (array, p, r)
        quicksort (array, p, q-1)
        quicksort (array, q+1, r)

听起来你真正的问题是“为什么使用线程时递归深度更短”?我将尝试回答这个问题。

首先,背景。每个递归级别都存储在称为堆栈的内存区域中。不幸的是,系统必须提前分配堆栈空间,并且它事先并不知道您的程序可能需要多少堆栈空间。这就是为什么过多的递归会导致“最大递归深度”错误:您的程序已用完所有堆栈空间。

每个线程都需要自己的堆栈来存储当前正在该线程中执行的函数列表。在单线程程序中,系统可以为该线程的堆栈提供一大块内存。在多线程程序中,系统必须更加保守一点,它只为每个线程提供一个小的堆栈。否则,具有多个线程的程序可能会很快用完所有系统内存,仅包括堆栈空间(其中大部分不会被使用)。

所有这些都是由操作系统和/或 C 库完成的,Python(更准确地说,CPython)在 C 库上运行。 Python 尽力阻止您使用整个 C 堆栈,因为这会导致严重崩溃而不仅仅是异常。你可以告诉 Python 如何表现setrecursionlimit功能,但这并没有改变actual可用的堆栈空间量。

在带有 bash shell 的 UNIX 系统上,您可以使用以下命令更改堆栈大小ulimit -s命令。类型help ulimit在 bash shell 提示符处获取更多信息。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python多线程“超过最大递归深度” 的相关文章

  • Python模块可以访问英语词典,包括单词的定义[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一个 python 模块 它可以帮助我从英语词典中获取单词的定义 当然有enchant 这可以帮助我检查该单词是否存在于英语中
  • 在 Tensorflow tf.nn.nce_loss 中出现 TypeError:'Mul' Op 的输入 'y' 的类型为 float32,与参数 'x' 的 int32 类型不匹配

    我正在研究 Tensor Flow 中的 Bag of Words 实现 并得到了 类型错误 Mul Op 的输入 y 的类型为 float32 与参数 x 的 int32 类型不匹配 在 tf nn nce loss 中 我尝试查看 tf
  • 从 ffmpeg 获取实时输出以在进度条中使用(PyQt4,stdout)

    我已经查看了很多问题 但仍然无法完全弄清楚 我正在使用 PyQt 并且希望能够运行ffmpeg i file mp4 file avi并获取流式输出 以便我可以创建进度条 我看过这些问题 ffmpeg可以显示进度条吗 https stack
  • 将数据帧行转换为字典

    我有像下面的示例数据这样的数据帧 我正在尝试将数据帧中的一行转换为类似于下面所需输出的字典 但是当我使用 to dict 时 我得到了索引和列值 有谁知道如何将行转换为像所需输出那样的字典 任何提示都非常感激 Sample data pri
  • 如何在 pytest 中将单元测试和集成测试分开

    根据维基百科 https en wikipedia org wiki Unit testing Description和各种articles https techbeacon com devops 6 best practices inte
  • Pandas 中允许重复列

    我将一个大的 CSV 包含股票财务数据 文件分割成更小的块 CSV 文件的格式不同 像 Excel 数据透视表之类的东西 第一列的前几行包含一些标题 公司名称 ID 等在以下列中重复 因为一家公司有多个属性 而不是一家公司只有一栏 在前几行
  • 从零开始的 numpy 形状意味着什么

    好的 我发现数组的形状中可以包含 0 对于将 0 作为唯一维度的情况 这对我来说是有意义的 它是一个空数组 np zeros 0 但如果你有这样的情况 np zeros 0 100 让我很困惑 为什么这么定义呢 据我所知 这只是表达空数组的
  • 忽略 Mercurial hook 中的某些 Mercurial 命令

    我有一个像这样的善变钩子 hooks pretxncommit myhook python path to file myhook 代码如下所示 def myhook ui repo kwargs do some stuff 但在我的例子中
  • 如何计算numpy数组中元素的频率?

    我有一个 3 D numpy 数组 其中包含重复的元素 counterTraj shape 13530 1 1 例如 counterTraj 包含这样的元素 我只显示了几个元素 array 136 129 130 103 102 101 我
  • 对图像块进行多重处理

    我有一个函数必须循环遍历图像的各个像素并计算一些几何形状 此函数需要很长时间才能运行 在 24 兆像素图像上大约需要 5 小时 但似乎应该很容易在多个内核上并行运行 然而 我一生都找不到一个有据可查 解释充分的例子来使用 Multiproc
  • Numpy 过滤器平滑零区域

    我有一个 0 及更大整数的 2D numpy 数组 其中值代表区域标签 例如 array 9 9 9 0 0 0 0 1 1 1 9 9 9 9 0 7 1 1 1 1 9 9 9 9 0 2 2 1 1 1 9 9 9 8 0 2 2 1
  • mac osx 10.8 上的初学者 python

    我正在学习编程 并且一直在使用 Ruby 和 ROR 但我觉得我更喜欢 Python 语言来学习编程 虽然我看到了 Ruby 和 Rails 的优点 但我觉得我需要一种更容易学习编程概念的语言 因此是 Python 但是 我似乎找不到适用于
  • 使用 PyTorch 分布式 NCCL 连接失败

    我正在尝试使用 torch distributed 将 PyTorch 张量从一台机器发送到另一台机器 dist init process group 函数正常工作 但是 dist broadcast 函数中出现连接失败 这是我在节点 0
  • Tkinter - 浮动窗口 - 调整大小

    灵感来自this https stackoverflow com a 22424245 13629335问题 我想为我的根窗口编写自己的调整大小函数 但我刚刚注意到我的代码显示了一些性能问题 如果你快速调整它的大小 你会发现窗口没有像我希望
  • 迭代 my_dict.keys() 并修改字典中的值是否会使迭代器失效?

    我的例子是这样的 for my key in my dict keys my dict my key mutate 上述代码的行为是否已定义 假设my dict是一本字典并且mutate是一个改变其对象的方法 我担心的是 改变字典中的值可能
  • 是否有一种更简单的方法可以并行运行命令,同时在 Windows PowerShell 中保持高效?

    此自我回答旨在为那些受困于 Windows PowerShell 并由于公司政策等原因而无法安装模块的用户提供一种简单且高效的并行替代方案 在 Windows PowerShell 中 built in可用的替代方案local并行调用是St
  • 您可以将操作直接应用于map/reduce/filter 中的参数吗?

    map and filter通常可以与列表理解互换 但是reduce并不那么容易被交换map and filter 此外 在某些情况下我仍然更喜欢函数语法 但是 当您需要对参数本身进行操作时 我发现自己正在经历语法体操 最终必须编写整个函数
  • 字典和数组作为类变量与实例变量

    这是赚取积分的简单方法 请解释以下内容 class C a b 0 c def init self self x def d self k v self x k v self a k v self b v self c append v d
  • 迭代 pandas 数据框的最快方法?

    如何运行数据框并仅返回满足特定条件的行 必须在之前的行和列上测试此条件 例如 1 2 3 4 1 1 1999 4 2 4 5 1 2 1999 5 2 3 3 1 3 1999 5 2 3 8 1 4 1999 6 4 2 6 1 5 1
  • 您可以使用关键字参数而不提供默认值吗?

    我习惯于在 Python 中使用这样的函数 方法定义 def my function arg1 None arg2 default do stuff here 如果我不供应arg1 or arg2 那么默认值None or default

随机推荐

  • Bin Packing - 暴力递归解决方案 - 如何使其更快

    我有一个数组 其中包含不同大小的材料列表 4 3 4 1 7 8 但是 该箱子最多可容纳 10 号材料 我需要找出包装数组中所有元素所需的最小箱子数量 对于上面的数组 你可以打包成 3 个 bin 并按如下方式划分它们 4 4 1 3 7
  • 打印所有内容,不带省略号

    当我尝试打印列时 print dataframe columns 它向我展示了 Index u Id u Guid u HardDisksInfo u ServerVersion u Email u BackupServer u DataS
  • 如何提取在 python 中渲染 HTML 页面期间获得的 url 列表?

    我希望能够获取当我们尝试打开页面时浏览器将执行 GET 请求的所有 URL 的列表 例如 如果我们尝试打开 cnn com 浏览器递归请求的第一个 HTTP 响应中会有多个 URL 我不想渲染页面 但我试图获取渲染页面时请求的所有 url
  • 如何使用 ajax-call joomla 2.5 加载自定义 html 模块

    我的 html 页面中有一个类名 flyer 和 href MY HREF 的链接 当用户单击链接时 我想加载具有特定 ID 的 自定义 html 模块 您能否告诉我 MY HREF 的语法如何 例如http www mywebsite c
  • 如果 autoStartup 设置为 false,如何手动启动 Spring Cloud Stream Binder

    我在用着spring cloud starter stream kafka创建 Kafka 消费者绑定并且我已经配置spring cloud stream bindings input consumer autoStartup to fal
  • 使用 PHP 根据日期显示内容

    我正在搭建一个基于 Wordpress 的竞赛网站 从法律上讲 比赛必须在午夜开始 为了避免半夜起来设置内容 我想构建一些 PHP 逻辑来显示开始日期之后的所有内容 并在此之前显示一些基本的 HTML 用于启动页面 我是一个完全的编程新手
  • 当监视从 componentDidMount 调用的组件方法时,永远不会调用间谍

    在 React 组件中我有 export default class MyComp extends Component componentDidMount this customFunc customFunc gt 当我尝试使用 Jest
  • 是否有一个 R 包可以处理 POSIX 对象并返回一周中的第 n 天?

    我编写了一个函数 当提供日期范围时 一周中特定日期的名称以及给定月份中该天的出现情况 例如 每个月的第二个星期五 将返回相应的日期 然而 它的速度不是很快 而且我并不 100 相信它的稳健性 R 中是否有一个包或一组函数可以对 POSIX
  • 服务器发送事件 停止 使用新参数启动

    请帮忙 我正在使用服务器发送事件根据数据库中存储的数据动态更新网站 我现在希望根据上一条消息中收到的数据将新参数 abc php lastID xxx 传递回 PHP 脚本 我明白我可以使用event close停止当前的 流 但我正在努力
  • 如何将离散值映射到seaborn中的热图?

    我正在尝试使用seaborn 在热图中绘制离散值 这是我试图绘制的列表 xa 5 4 4 4 13 4 4 1 9 4 3 9 1 4 4 1 7 1 5 3 7 1 9 4 3 9 5 4 2 1 4 1 9 4 3 9 4 8 1 7
  • 读取 JSON 文件时出现“参数列表太长”[重复]

    这个问题在这里已经有答案了 我有数千个 JSON 文件 我想将它们合并为一个文件 我正在使用下面的命令来执行此操作 jq s json gt result json 但我收到参数列表太长错误 可能是因为我尝试合并的文件数量 这个问题有什么解
  • ARC (Chrome) 上的 ANDROID_ID 与 Android 有何不同?

    在 Android 上 ANDROID ID 对于设备上的用户配置文件来说是常量 请参阅在这里讨论 ARC 上的情况似乎并非如此 但 ARC 非常新 希望这种情况能够改变 还值得注意的是 关于 ARC 的设备识别 Android 序列号在
  • 确定是否设置了对照片库的访问 - PHPhotoLibrary

    借助 iOS 8 中的新功能 如果您在应用程序中使用相机 它会请求访问相机的权限 然后当您尝试重新拍摄照片时 它会请求访问照片库的权限 下次启动应用程序时 我想检查相机和照片库是否有访问权限 对于相机 我通过以下方式检查 if AVCapt
  • Javascript GZIP 和 btoa 并用 C# 解压

    我正在开发一个应用程序 其中使用 pako gzip 压缩大型 JSON 数据 然后使用 btoa 函数将其设为 base64string 以便将数据发布到服务器 在我写的 JavaScript 中 var data JSON string
  • ff包写入错误

    我正在尝试使用 R 处理 1909x139352 数据集 由于我的计算机只有 2GB RAM 因此该数据集对于传统方法来说太大 500MB 所以我决定使用ff包裹 然而 我遇到了一些麻烦 功能read table ffdf无法读取第一个数据
  • 过去 X 小时内未使用的 Docker 修剪镜像

    有办法吗docker prune image如果在过去 X 小时内未使用图像或其中间层 是否要删除图像 目的是 假设构建已经创建了中间和最终映像 F1 后续构建可以使用中间映像 当后续构建正在运行时 如果我运行docker image pr
  • 在python中导入全局命名空间

    假设我有以下文件 a py glo var 0 def func global glo var glo var 5 print A d glo var b py from a import func print B d glo var 如果
  • 从视图列检索数据时如何避免 64k 限制?

    我知道 SSJS 版本 DbColumn 与原始 Formula 语言版本具有相同的 64k 限制 所以到目前为止我用过NotesView getColumnValues 相反 相信在这里我不会面临这样的限制 正如昨天的紧急支持电话告诉我的
  • 选项卡的关闭按钮不支持 vcl 样式

    我已经使用了本示例中提供的代码如何为 TPageControl 的 Ttabsheet 实现关闭按钮在页面控件的每个选项卡上绘制一个关闭按钮 我在代码中用样式服务替换了 ThemeServices 并且在应用样式时 关闭按钮不会显示 也不会
  • python多线程“超过最大递归深度”

    我使用Python多线程来实现快速排序 快速排序是在函数中实现的 它是一个递归函数 每个线程调用 Quicksort 对其拥有的数组进行排序 每个线程都有自己的数组 用于存储需要排序的数字 如果数组大小较小 def partition ar