RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题

全部问题

Martin Hope
alexandrov
Asked: 2024-08-13 22:06:29 +0000 UTC

如何将 YAML 文件中的设置重置为默认值?

  • 8

我编写了一个可以读取数据并将数据写入 .yaml 文件的程序。但现在我面临着将重置设置功能组织为标准的问题。我不知道如何在我的代码中最好地做到这一点...组织这样一个易于理解且简洁的函数的最佳方法是什么?

主要代码文件(settings.py):

from abc import ABC, abstractmethod
from dataclasses import dataclass
from pathlib import Path
from enum import Enum

import yaml

from src.settings.default_settings import JetInjectorConstant, CentrifugalInjectorConstant


class ListNameSettingsFile(Enum):
    """
    РУС: Список файлов конфигурации
    ENG: List of configuration files
    """
    LIST_NAME_SETTINGS_FILE = ["injector_settings"]


@dataclass(frozen=True)
class Settings(ABC):
    """
    РУС: Основной класс для обработки файлов конфигурации
    ENG: The main class for processing configuration files
    """
    @staticmethod
    def get_root_dir():
        """
        РУС: Директория установки ПО
        ENG: The software installation directory
        """
        return Path(__file__).absolute().parent

    @abstractmethod
    def get_data_for_recording(self) -> dict:
        """
        РУС: Получение данных для загрузки в файл конфигурации
        ENG: Getting data to upload to a configuration file
        """
        raise NotImplementedError("Данные настроек не загружены")

    @abstractmethod
    def name_settings_file(self) -> str:
        """
        РУС: Получение имени файла конфигурации
        ENG: Getting the name of the configuration file
        """
        raise NotImplementedError("Имя файла настроек не загружено")

    @property
    def save_settings(self) -> None:
        """
        РУС: Запись констант в файл конфигурации
        ENG: Writing constants to a configuration file
        """
        with open((self.get_root_dir() / "data").joinpath(self.name_settings_file() + ".yaml"), "w") as outfile:
            new_dump = yaml.dump(self.get_data_for_recording())
            outfile.write(new_dump)
        return None

    @property
    def read_settings(self) -> dict:
        """
        РУС: Чтение констант из файла конфигурации
        ENG: Reading constants from a configuration file
        """
        with open((self.get_root_dir() / "data").joinpath(self.name_settings_file() + ".yaml"), "r") as stream:
            read_date = yaml.safe_load(stream)
        return read_date


@dataclass(frozen=True)
class InjectorSettings(Settings):
    """
    РУС: Класс констант для проведения расчетов
    ENG: A class of constants for performing calculations
    """
    laminar: float | None = None
    turbulent: float | None = None
    right_angle: float | None = None

    def get_data_for_recording(self) -> dict:
        """
        РУС: Загрузка констант для расчетов
        ENG: Loading constants for calculations
        """
        injector_settings = {
            "reynolds": {"laminar": self.laminar, "turbulent": self.turbulent},
            "right_angle": self.right_angle,
        }
        return injector_settings

    def name_settings_file(self) -> str:
        """
        РУС: Передача имени файла конфигурации
        ENG: Passing the name of the configuration file
        """
        return ListNameSettingsFile.LIST_NAME_SETTINGS_FILE.value[0]

具有标准设置的文件(default_settings.py):

from enum import Enum


class JetInjectorConstant(Enum):
    """Стандартные значение констант струйной """
    LAMINAR = 2000
    TURBULENT = 10_000


class CentrifugalInjectorConstant(Enum):
    """Стандартные значение констант центробежной форсунки"""
    RIGHT_ANGLE = 90

更新:

在这个项目结构中,我们不是将数据存储在文件中default_settings.yaml,而是将数据存储在文件中default_settings.py,如果不小心删除了这样的文件.yaml,这将导致软件彻底崩溃,如果在程序内部发现了这些数据,将能够恢复其运作。

该文件settings.yaml将存储负责计算边界和启动程序的设置的设置。它们在程序启动时使用一次,并且不会进一步使用。也就是说,如果您在运行期间更改它们,这不会以任何方式影响程序的运行。

需要设置重置系统,以便如果输入了错误的数据,可以返回到程序安装状态(标准设置)。如果在尝试打开文件时,由于文件结构损坏或与无法打开或读取文件相关的其他错误而导致程序无法执行此操作,也会激活重置系统。

python
  • 1 个回答
  • 41 Views
Martin Hope
videxerion
Asked: 2024-08-11 23:38:30 +0000 UTC

当加载许多小数据包时评估网络接口上的负载

  • 8

问题描述

我正在编程一个批量端口扫描器。当尝试由于线程数量而提高速度时,我预料到会遇到这样的事实:在某个时刻,延迟 (ping) 达到了 300-800 毫秒的极高值。当然,很可能这可能与我的电脑没有直接关系,而是会让我的路由器超载,但我想确定一下。这就是问题所在。我只是不知道如何评价这种超载。我之前问过类似的问题,但是通过比较每秒流量和接口吞吐量来估算的方法并没有显示拥塞(网络负载标记保持在5%左右)。我认为重点是 TCP 连接的批量创建/关闭不会占用大量流量,因为我没有发送任何内容,只是检查连接是否成功。有一个想法是使用每秒数据包进行评估,但我面临的事实是,我根本不知道如何找出接口在开始过载之前每秒可以通过多少个数据包,从而增加延迟。

我的应用程序如何工作的描述

为了简化答案的工作,有必要稍微介绍一下应用程序本身。它是用 Golang 编写的,正如已经提到的,该应用程序的目的是大规模扫描端口并将结果输入数据库(尚未完成)。它创建了许多 goroutine(根据经验,500 个扫描线程只会稍微增加延迟 20-30 毫秒,当 600 个线程将延迟增加到 300 毫秒)尝试创建 TCP 连接,如果成功,则认为端口打开。下面您可以看到代码,其中有两个函数ScannerThread,scanHost第一个是聚合器(获取 IP 地址,运行扫描函数,获取结果),第二个按顺序迭代端口以检查它们。

// ScannerThread является сканирующей горутиной, сюда попадают адреса после пингования
func ScannerThread(IPChannel chan string) {
    defer WorkWG.Done()

    for {
        ip, ok := <-IPChannel
        if ok {
            ports := scanHost(ip)
            if len(ports) != 0 {
                for _, port := range ports {
                    println(ip, port)
                }
            }
        } else {
            break
        }
    }
}

// Функция сканирует порты конкретного адреса
func scanHost(ip string) []int {
    openPorts := make([]int, 0)

    for port := 1; port <= 1024; port++ {
        d := net.Dialer{Timeout: time.Millisecond * 100}
        conn, err := d.Dial("tcp", ip+":"+strconv.Itoa(port))

        if err == nil {
            conn.Close()
            openPorts = append(openPorts, port)
        }
    }

    return openPorts
}

我想收到什么

我需要一种方法来估计此类流量的网络接口拥塞情况。即使最终发现超载的不是我设备的网络接口,而是沿途的节点,我仍然想确保这不是我的设备的问题。然而,我仍然很乐意接受其他想法和解释,解释为什么这项任务的延迟会增加这么多。

请,如果您想提供某种可以测量某些参数的实用程序,请尝试还包括对该实用程序测量哪些参数的解释,因为我需要在我的程序中实现这一点,并且使用控制台输出解析是不礼貌的。

附加信息

  1. 我使用的是主板内置的 Realtek RTL8118AS 网卡,标称带宽为 1 Gbps。
  2. 在整个本地网络中,我使用 UTP cat 5e。
  3. 我使用 Linux,或者更确切地说是 Arch Linux。
  4. 我用不同的工具测试了处理器负载,负载平均增加了10-15%,即处理器没有过载。
linux
  • 1 个回答
  • 84 Views
Martin Hope
Pu5her
Asked: 2024-08-06 00:37:56 +0000 UTC

如何阻止用户设置属性策略

  • 8

如果右键单击某个属性,我们会看到一个上下文菜单,其中包含“配置属性策略”项

如何为某些用户隐藏此项目?

制定财产政策

lsfusion
  • 1 个回答
  • 34 Views
Martin Hope
Corkscrew
Asked: 2024-08-06 00:34:20 +0000 UTC

为什么装饰器以不同的顺序执行?

  • 8

我正在和装饰者打交道。按照理论,它们是自下而上应用的,也就是说,最接近被装饰函数的描述的是第一个。然而,代码

'''case 1'''
import functools

def bold(func):
    @functools.wraps(func)
    def wrapper(*args, **kwargs):
        return '<b>' + func(*args, **kwargs) + '</b>'
    return wrapper

def italic(func):
    @functools.wraps(func)
    def wrapper(*args, **kwargs):
        return '<i>' + func(*args, **kwargs) + '</i>'
    return wrapper

strng = '1123123123'

@bold
@italic
def greet(string):
    return string

print(greet(strng))

    """Case 2:"""

    def dec1(func):
        @functools.wraps(func)
        def wrapper(*args, **kwargs):
                print(f'Первый декоратор')
                value = func(*args, **kwargs)
                return value
        return wrapper
    
    def dec2(func):
        @functools.wraps(func)
        def wrapper(*args, **kwargs):
            print(f'Второй декоратор')
            value = func(*args, **kwargs)
            return value
        return wrapper
    
    @dec1
    @dec2
    def function(string):
        return string
    
    print(function('fdsfsdf'))

给我结果

<b><i>Hello world!</i></b>
第一个装饰器
第二个装饰器
fdsfsdf

问题是为什么在第一种情况下装饰器像理论上一样使用,首先是斜体,然后是粗体,从下到上。在第二种情况下,首先是 dec1,它在顶部,然后是 dec2,它在下面?我不明白装饰器和函数的描述有何不同,不同行为的原因是什么?

python
  • 3 个回答
  • 57 Views
Martin Hope
mrgervant
Asked: 2024-08-04 03:19:34 +0000 UTC

在 Python 中使用 JIT 编译器

  • 8

Python 3.13 预发布版本添加了实验性 JIT 编译器。也就是说,它可能会在秋季成为完整版本的一部分。据说它使代码运行得更快。

但是,如果我理解正确的话,JIT编译器可以通过不同的方式实现,因为Python 有几个非官方编译器:pypy / numba。因此,他们可以通过不同的方式或在不同的地方加速应用程序。

问题出现了 - JIT 编译器在 Python 中到底优化了什么,相应地,它们可以用于什么类型的任务?

python
  • 1 个回答
  • 102 Views
上一页
下一页

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5