小编Cod*_*ght的帖子

使用 Starlette 和 Uvicorn 进行 Python 日志记录时文件句柄过多(在 lsof 上)

我有一个通过 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)

它在 …

python logging lsof starlette uvicorn

8
推荐指数
0
解决办法
280
查看次数

在Dask数据框子集上强制局部性

我正在尝试将大型Dask数据帧分布在多台计算机上,以便在数据帧上进行(后来的)分布式计算。我为此使用dask-distributed。

我看到的所有分发的示例/文档都是从网络资源(hdfs,s3等)填充初始数据负载,并且似乎没有将DAG优化扩展到负载部分(似乎假设网络负载是在另一个问题的答案上强调了这一点:Dask是否与HDFS通信以优化数据局部性?

但是,我可以看到一些我们想要的情况。例如,如果我们在此数据库的节点上共存有一个分片数据库+ dask worker,我们希望将仅来自本地分片的记录强制填充到本地dask worker中。从文档/示例来看,网络冲突似乎是必须承担的成本。是否可以强制从特定工作人员获取单个数据框的一部分?

我尝试过的替代方法是,尝试强制每个工作程序运行一个函数(迭代地提交给每个工作程序),其中该函数仅加载该计算机/分片本地的数据。这行得通,而且我有一堆具有相同列模式的最佳本地数据框-但是,现在我没有单个数据框,而是n个数据框。是否可以跨多台机器合并/融合数据帧,以便只有一个数据帧引用,但是部分对特定机器具有亲和力(在一定范围内,由任务DAG决定)?

dask dask-distributed

5
推荐指数
1
解决办法
102
查看次数

AWS EKS 节点组“创建失败”:实例无法加入 kubernetes 集群

我能够创建一个 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 amazon-web-services kubernetes amazon-eks

5
推荐指数
3
解决办法
4841
查看次数