Stapelgröße in einem Python-Skript festlegen
Bin ich Umwandlung ein csh-Skript, ein python-Skript. Das Skript ruft einen Speicher-intensive ausführbare Datei, die erfordert einen sehr großen stack, so dass die csh-Skript legt die stacksize unbegrenzt:
limit stacksize unlimited
Wenn ich versuchen Sie es zum reproduzieren dieses Skript in python, führe ich Sie in einer sehr naiven Art und Weise, mit os.system
z.B.:
os.system('some_executable')
Aber ich weiß nicht, wie zu sagen, die OS ausgeführt werden diese Programme mit unbegrenzter stacksize. Gibt es eine Möglichkeit, um anzugeben, stacksize für Anrufe in ein python-script? Gibt es einige low-level-Systemaufruf, der ich mit sollte? Und gibt es ein Modul (ähnlich wie shutil) was steuert diese?
InformationsquelleAutor der Frage marshall.ward | 2011-02-21
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie einfach die (u)limit-Befehl der shell, wenn Sie wollen:
Oder (wahrscheinlich besser) verwenden Ressource.setrlimit:
InformationsquelleAutor der Antwort Nicholas Riley
Ich habe gute Erfahrungen mit dem folgenden code. Es erfordert keine spezielle Berechtigungen Benutzer:
Tut es jedoch nicht zu funktionieren scheinen, mit pypy.
InformationsquelleAutor der Antwort Thomas Ahle
Du suchst die Python setrlimit - Schnittstelle
resource.RLIMIT_STACK
.Beachten Sie, dass standard-Benutzer kann nicht heben Ihre harten Grenzen, sondern nur von root (gut, einen Prozess mit den
CAP_SYS_RESOURCE
- Fähigkeit (siehe capabilities(7)) können Prozesse erhöhen Ihre Grenzen, so dass Sie verwenden müssen, um die PAM-pam_limits(8)limits.conf(5)
- Datei zu erhöhen, die harten Grenzen für die Nutzer in Frage stellen.InformationsquelleAutor der Antwort sarnold
Können Sie ändern Sie die stack-Größe des aktuellen Prozesses über
- thread.stack_groesse
aber ich weiß nicht, ob das richtig vererbt Teilprozesse. Diese Schnittstelle erfordert auch eine bestimmte stack-Größe - "unlimited" ist keine option.InformationsquelleAutor der Antwort ncoghlan