python stack csh

Estableciendo stacksize en un script de python



csh (4)

Estás buscando la interfaz de resource.setrlimit Python, resource.RLIMIT_STACK .

Tenga en cuenta que los usuarios estándar no pueden aumentar sus límites duros, solo los procesos de raíz (bueno, un proceso con la capacidad CAP_SYS_RESOURCE (ver capacidades (7)) pueden aumentar sus límites; por lo tanto, es posible que deba usar el PAM pam_limits (8) limits.conf(5) archivo para aumentar los límites duros para los usuarios en cuestión.

Estoy convirtiendo un script csh a un script python. La secuencia de comandos llama a un ejecutable que usa mucha memoria y requiere una pila muy grande, por lo que la secuencia de comandos csh establece el tamaño de la pila en ilimitado:

limit stacksize unlimited

Cuando intento reproducir este script en python, los ejecuto de una manera muy ingenua, usando os.system , por ejemplo:

os.system(''some_executable'')

Pero no sé cómo decirle al sistema operativo que ejecute estos ejecutables con un tamaño de pila ilimitado. ¿Hay una manera de especificar el tamaño de pila para las llamadas dentro de un script de python? ¿Hay alguna llamada al sistema de bajo nivel que debería estar usando? ¿Y hay un módulo (similar a shutil) que controla esto?


Puede modificar el tamaño de la pila del proceso actual a través de thread.stack_size , pero no sé si los subprocesos heredarán esto correctamente. Esa interfaz también requiere un tamaño de pila específico, "ilimitado" no es una opción.


Puede usar el comando (u) limit de su shell, si desea:

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

O (probablemente mejor) use resource.setrlimit :

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


Tengo buena experiencia con el siguiente código. No requiere ningún permiso de usuario especial:

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

Sin embargo, parece que no funciona con pypy.