我正在将csh脚本转换为python脚本.该脚本调用内存密集型可执行文件,需要非常大的堆栈,因此csh脚本将stacksize设置为unlimited:
limit stacksize unlimited
Run Code Online (Sandbox Code Playgroud)
当我尝试在python中重现这个脚本时,我以一种非常天真的方式执行它们os.system,例如:
os.system('some_executable')
Run Code Online (Sandbox Code Playgroud)
但我不知道如何通过无限制的堆栈大小来告诉操作系统运行这些可执行文件.有没有办法为python脚本中的调用指定stacksize?是否有一些我应该使用的低级系统调用?是否有一个控制它的模块(类似于shutil)?
Tho*_*hle 21
我对以下代码有很好的经验.它不需要任何特殊的用户权限:
import resource, sys
resource.setrlimit(resource.RLIMIT_STACK, (2**29,-1))
sys.setrecursionlimit(10**6)
Run Code Online (Sandbox Code Playgroud)
然而它似乎与pypy无关.
Nic*_*ley 18
如果需要,您可以使用shell的(u)limit命令:
os.system('ulimit -s unlimited; some_executable')
Run Code Online (Sandbox Code Playgroud)
或者(可能更好)使用resource.setrlimit:
resource.setrlimit(resource.RLIMIT_STACK, (resource.RLIM_INFINITY, resource.RLIM_INFINITY))
Run Code Online (Sandbox Code Playgroud)