python多线程“最大递归深度超过”
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python多线程“最大递归深度超过”,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1642字,纯文字阅读大概需要3分钟。
内容图文
![python多线程“最大递归深度超过”](/upload/InfoBanner/zyjiaocheng/807/9a007381ba2847dabef6ceafd6ebae57.jpg)
我使用Python多线程来实现Quicksort.
Quicksort是在函数中实现的.它是一个递归函数.
每个线程调用Quicksort对它拥有的数组进行排序.每个线程都有自己的数组,用于存储需要排序的数字.
如果阵列大小较小(<10,000).它运行正常.
但是,如果数组大小较大,则显示“最大递归深度超过”.
所以,我使用setrecursionlimit()函数将递归深度重置为1500.但程序直接崩溃…
以下是快速排序代码.如果不在多线程环境中,它可以很好地工作.
似乎多线程是递归深度问题的原因.
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函数执行操作,但这不会更改可用的实际堆栈空间量.
在具有bash shell的unix-ish系统上,您可以使用ulimit -s命令更改堆栈大小.在bash shell提示符下键入help ulimit以获取更多信息.
内容总结
以上是互联网集市为您收集整理的python多线程“最大递归深度超过”全部内容,希望文章能够帮你解决python多线程“最大递归深度超过”所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。