Réglage stacksize dans un script python
Je suis de la conversion d'un csh de script dans un script python. Le script appelle une gourmandes en mémoire exécutable qui nécessite une très grande pile, de sorte que le csh script définit la taille de la pile pour en illimité:
limit stacksize unlimited
Quand j'essaie de reproduire ce script en python, je les exécuter dans un très naïf manière, à l'aide os.system
, par exemple:
os.system('some_executable')
Mais je ne sais pas comment dire le système d'exploitation pour exécuter les fichiers exécutables avec un nombre illimité d'stacksize. Est-il un moyen de spécifier stacksize pour les appels à l'intérieur d'un script python? Est-il un système de bas niveau d'appel que je devrais utiliser? Et est-il un module (similaire à shutil) qui contrôle ce?
- En essayant de définir
rlimit_stack
après Pile Choc réhabilitations peut entraîner une défaillance ou de problèmes connexes. Voir aussi Red Hat Problème 1463241
Vous devez vous connecter pour publier un commentaire.
Vous pouvez simplement utiliser l' (u)limite de commande de votre shell, si vous le souhaitez:
Ou (probablement mieux) utiliser de la ressource.setrlimit:
setrlimit
premier donc je suis de l'attribution de celui-ci, car il comprend le code explicite. Je suis reconnaissant pour tous les réponses, tout de même).J'ai une bonne expérience avec le code suivant. Il ne nécessite pas de toute spéciale, des autorisations d'utilisateur:
Il n'a cependant pas l'air de fonctionner avec pypy.
sys.setrecursionlimit(10**6)
fera l'interpréteur Python erreur de segmentation si vous débordement de la pile.os.system
.getting the error no module named resource
resource
exemple, de ne pasos.system
, mais c'est peut-être source de confusion pour le lecteur occasionnel.Vous êtes à la recherche pour le Python setrlimit interface,
resource.RLIMIT_STACK
.Noter que les utilisateurs standard ne peuvent pas augmenter leurs limites strictes, seule racine (ainsi, un processus avec la
CAP_SYS_RESOURCE
capacité (voir capabilities(7)) les processus peuvent élever leurs limites, de sorte que vous pouvez avoir besoin d'utiliser le PAM pam_limits(8)limits.conf(5)
fichier à augmenter la dur de limites pour les utilisateurs en question.Vous pouvez modifier la taille de la pile du processus courant via
thread.stack_size
, mais je ne sais pas si ce sera correctement héritées par les sous-processus. Cette interface a également besoin d'une pile de taille "illimité" n'est pas une option.