Python3:超出资源限制时发生异常还是返回代码?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Python3:超出资源限制时发生异常还是返回代码?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1179字,纯文字阅读大概需要2分钟。
内容图文
![Python3:超出资源限制时发生异常还是返回代码?](/upload/InfoBanner/zyjiaocheng/666/626f25c81a2446b7a3de0f2e7799e57a.jpg)
我正在运行python 3.4.3.我有一个子进程,该子进程可能会运行很长时间,或生成太大的文件.我有这个代码.
def setlimits():
if DEBUG:
print("Setting resource limit in child (pid {0})".format(os.getpid()))
resource.setrlimit(resource.RLIMIT_CPU, (.05, .05)) # CPU time in secs
resource.setrlimit(resource.RLIMIT_FSIZE, (1000000, 1000000)) # file size
resource.setrlimit(resource.RLIMIT_NOFILE, (20, 20)) # Number open files
然后,我使用此代码调用子流程(在较大的例程内部).
rc = None
try:
rc = subprocess.call(["potentially long-running command"],shell=True, preexec_fn=setlimits)
except Exception as err:
print("Exception happened")
rc = -1
print("rc = {0}".format(str(rc)))
当我给它提供一个运行时间很长的进程时,它不会给我一个例外. (基于资源文档,我期望OSError.)它给了我rc = 137.
知道在哪里记录吗?我当然想知道我已经解决了所有情况;我是否需要if rc> 128类型的检查?
解决方法:
137是一个reserved exit code,指示该进程已被终止-等于128 9(其中9表示信号9或SIGKILL).当进程达到其硬CPU限制并被内核杀死时,最有可能发生这种情况.
如果被调用的进程以非零退出状态返回,则subprocess.call()不会引发异常.如果您想要这种行为,最好使用subprocess.check_call()或subprocess.run(..., check=True),这将在非零退出状态下引发CalledProcessError.
内容总结
以上是互联网集市为您收集整理的Python3:超出资源限制时发生异常还是返回代码?全部内容,希望文章能够帮你解决Python3:超出资源限制时发生异常还是返回代码?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。