python - 超过时间/内存限制时Docker linux终止进程脚本
问题描述
我正在尝试在我的 docker 容器中运行 python 代码。我已经设置了 run.sh 脚本如下:
#!/usr/bin/env bash
ulimit -s 5
timeout --signal=SIGTERM 5 python3 main.py
exit $?
主要.py:
def factorial(x):
"""This is a recursive function
to find the factorial of an integer"""
if x == 1:
return 1
else:
return (x * factorial(x-1))
num = 900
print("The factorial of", num, "is", factorial(num))
我运行具有上述脚本的图像,如下所示:
container = subprocess.run(["docker", "run", "mycontainertag"],capture_output=True)
然而,尽管超过了时间和内存限制,它并没有使用阶乘代码终止进程。
解决方案
问题不在于docker,而在于ulimit
.
ulimit -s 5
command 限制了同一 shell 中所有以下命令的堆栈跟踪,问题是 5 可能并不意味着您的想法。您已将堆栈限制设置为 5 * 1024 字节 (5 Kb),考虑到您同时拥有timeout
和python3
.
例如,在我的机器上,为了运行,run.sh
我需要超过 100 Kb。这个值取决于你机器的操作系统、它的当前状态、你正在使用的 python 版本(我猜),以及其他变量。
推荐阅读
- java - 无法在 chrome 中加载网页(由于 cloudflare 的 DDoS 投影)
- javascript - 如何使用 3d 安全流在一张发票中处理产品和订阅?
- ios - iOS Swift - 崩溃:com.apple.NSURLSession-delegate EXC_BREAKPOINT 0x0000000102e35fc0
- javascript - 如何从arr返回数据
- sql - 如何查询表以获取当前总计数,包括以前的日期?
- java - 怎么理解`?扩展 T` 是协变的吗?
- stm32 - 嵌入式平台上是否有任何轻量级的 ftl lib 包含坏块管理和磨损均衡?
- sql-server - 为什么 TRY_PARSE 这么慢?
- visual-studio-code - 如何使vscode资源管理器中的雪佛龙不显示?
- android - Android Paging 3:LoadType.APPEND 返回空远程键