我有一个通过 uvicorn 运行的最小 starlette 应用程序,除了返回一个 ping 什么都不做。奇怪的是,即使只有一个线程,我的日志文件也有 45 个文件句柄。句柄随着对应用程序的点击而增加,并在 45 处保持平稳。我正在使用 lsof 计算文件句柄:
lsof | grep kml-bkny.log
Run Code Online (Sandbox Code Playgroud)
当然,这是最小的再生产。实际上,我的整个应用程序正在生成数千个文件句柄。一些(~200)我希望给定线程*控制器模块。但是,我无法解释在何处创建了数千个文件句柄。在我的实际程序中,它们也不会停滞不前,它们会永远增长。
这是我的应用程序(api.py):
import logging
from starlette.applications import Starlette
from starlette.responses import JSONResponse
logger = logging.getLogger("kml")
logger.setLevel(logging.DEBUG)
handler = logging.FileHandler('/tmp/kml-bkny.log')
logger.addHandler(handler)
def controller_ping(request):
try:
logger.debug("Received /ping request")
return JSONResponse({}, status_code=200)
except Exception as e:
logger.error(e)
return JSONResponse({}, status_code=500)
app = Starlette()
app.add_route(path='/kml/ping', methods=['GET'], route=controller_ping)
Run Code Online (Sandbox Code Playgroud)
我在命令行上运行它,如下所示:
uvicorn api:app
Run Code Online (Sandbox Code Playgroud)
我使用一个简单的脚本测试应用程序:
import time
import requests
while True:
time.sleep(1)
for _ in range(10):
r = requests.get(f'http://localhost:8000/kml/ping', timeout=5)
Run Code Online (Sandbox Code Playgroud)
它在 …
我正在尝试将大型Dask数据帧分布在多台计算机上,以便在数据帧上进行(后来的)分布式计算。我为此使用dask-distributed。
我看到的所有分发的示例/文档都是从网络资源(hdfs,s3等)填充初始数据负载,并且似乎没有将DAG优化扩展到负载部分(似乎假设网络负载是在另一个问题的答案上强调了这一点:Dask是否与HDFS通信以优化数据局部性?
但是,我可以看到一些我们想要的情况。例如,如果我们在此数据库的节点上共存有一个分片数据库+ dask worker,我们希望将仅来自本地分片的记录强制填充到本地dask worker中。从文档/示例来看,网络冲突似乎是必须承担的成本。是否可以强制从特定工作人员获取单个数据框的一部分?
我尝试过的替代方法是,尝试强制每个工作程序运行一个函数(迭代地提交给每个工作程序),其中该函数仅加载该计算机/分片本地的数据。这行得通,而且我有一堆具有相同列模式的最佳本地数据框-但是,现在我没有单个数据框,而是n个数据框。是否可以跨多台机器合并/融合数据帧,以便只有一个数据帧引用,但是部分对特定机器具有亲和力(在一定范围内,由任务DAG决定)?
我能够创建一个 EKS 集群,但是当我尝试添加节点组时,我收到一个“创建失败”错误和详细信息:“NodeCreationFailure”:实例无法加入 kubernetes 集群
我尝试了各种实例类型,并在没有运气的情况下增加了更大的卷大小 (60gb)。查看 EC2 实例,我只看到以下问题。但是,很难做任何事情,因为我没有直接启动 EC2 实例(EKS NodeGroup UI 向导正在这样做。)
如果在我可以跳入 ec2 机器并“修复”它们之前发生故障,那么如何前进?
亚马逊 Linux 2
x86_64 上的内核 4.14.198-152.320.amzn2.x86_64
ip-187-187-187-175 登录:[54.474668] cloud-init[3182]:配置的存储库之一失败(未知),[54.475887] cloud-init[3182]:yum 没有足够的缓存数据接着说。此时唯一的 [54.478096] cloud-init[3182]:yum 可以做的安全事情就是失败。有几种方法可以“修复”这个问题: [54.480183] cloud-init[3182]: 1. 联系上游的存储库并让他们解决问题。[54.483514]云初始化[3182]:2.重新配置baseurl/etc。对于存储库,指向一个工作 [54.485198] cloud-init[3182]: 上游。如果您使用更新的 [ 54.486906] cloud-init[3182]: 分发版本而不是存储库支持的版本(并且 [ 54.488316] cloud-init[3182]: 先前分发版本的包仍然有效),这通常很有用)。[ 54. 489660] cloud-init[3182]: 3. 在暂时禁用存储库的情况下运行命令 [ 54.491045] cloud-init[3182]: yum --disablerepo= ... [ 54.491285] cloud-init[3182]: 4. 禁用永久存储库,因此 yum 默认情况下不会使用它。Yum [54.493407] cloud-init[3182]:然后将忽略存储库,直到您永久启用它 [54.495740] cloud-init[3182]:再次或使用 --enablerepo 临时使用:[54.495996] cloud-init[3182] ]: yum-config-manager --disable
amazon-ec2 ×1
amazon-eks ×1
dask ×1
kubernetes ×1
logging ×1
lsof ×1
python ×1
starlette ×1
uvicorn ×1