在python脚本中设置stacksize

2024-04-25 05:04:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在将csh脚本转换为python脚本。该脚本调用一个内存密集型可执行文件,它需要一个非常大的堆栈,因此csh脚本将stacksize设置为unlimited:

limit stacksize unlimited

当我试图用python重新生成这个脚本时,我以非常天真的方式执行它们,使用os.system,例如:

os.system('some_executable')

但我不知道如何告诉操作系统运行这些堆栈大小不受限制的可执行文件。有没有办法为python脚本中的调用指定stacksize?有什么低级的系统调用需要我使用吗?有没有一个模块(类似于shuil)来控制这个?


Tags: 内存脚本可执行文件堆栈os方式somesystem
3条回答

您正在寻找Pythonsetrlimit接口,resource.RLIMIT_STACK

请注意,标准用户不能提高其硬限制,只有根(好吧,具有CAP_SYS_RESOURCE功能的进程(请参阅功能(7))进程可以提高其限制;因此,您可能需要使用PAM PAM_limits(8)limits.conf(5)文件来提高所讨论用户的硬限制。

如果需要,可以使用shell的(u)limit命令:

os.system('ulimit -s unlimited; some_executable')

或者(可能更好)使用resource.setrlimit

resource.setrlimit(resource.RLIMIT_STACK, (resource.RLIM_INFINITY, resource.RLIM_INFINITY))

我对下面的代码有很好的经验。它不需要任何特殊的用户权限:

import resource, sys
resource.setrlimit(resource.RLIMIT_STACK, (2**29,-1))
sys.setrecursionlimit(10**6)

不过,它似乎并不适用于皮比。

相关问题 更多 >