python -m manager.manager_test Traceback (most recent call last): File "<frozen runpy>", line 198, in _run_module_as_main File "<frozen runpy>", line 88, in _run_code File "/home/ylu/repo/distribute-inference/manager/manager_test.py", line 13, in <module> test_submit_job() File "/home/ylu/repo/distribute-inference/manager/manager_test.py", line 7, in test_submit_job xid = mgr.submitJob({"model":"nerf"}) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ TypeError: JobManager.submitJob() takes 1 positional argument but 2 were given ,这是我遇到的问题,我的submitJob源码是 import redis from mq import conn class JobManager(): def __init__(self,**kwargs): pass def submitJob(self,**kwargs): r = conn.get_client() xid = r.xadd('jobs',kwargs) return xid ## 是哪里有问题

2024-02-23by@Marlboro&@ChatGPT.Model: gpt-4
Marlboro

python -m manager.manager_test
Traceback (most recent call last):
File "<frozen runpy>", line 198, in _run_module_as_main
File "<frozen runpy>", line 88, in _run_code
File "/home/ylu/repo/distribute-inference/manager/manager_test.py", line 13, in <module>
test_submit_job()
File "/home/ylu/repo/distribute-inference/manager/manager_test.py", line 7, in test_submit_job
xid = mgr.submitJob({"model":"nerf"})
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
TypeError: JobManager.submitJob() takes 1 positional argument but 2 were given ,这是我遇到的问题,我的submitJob源码是 import redis
from mq import conn

class JobManager():

def __init__(self,**kwargs):
    pass


def submitJob(self,**kwargs):
    r = conn.get_client()
    xid = r.xadd('jobs',kwargs)
    return xid   ## 是哪里有问题
Avatar
Avatar

错误信息表明JobManager.submitJob()函数被调用时传递了两个位置参数,但该函数只定义了一个位置参数(即隐含的self)。在Python中,实例方法的第一个参数总是self,代表类的实例本身。你的submitJob方法定义为接受任意数量的关键字参数(**kwargs),这意味着你需要以关键字参数的形式调用它,而不是位置参数。

从你提供的manager_test.py的代码片段来看,你调用submitJob方法时传递了一个包含model的字典作为位置参数。要解决这个问题,你需要将调用submitJob方法的方式从位置参数更改为关键字参数。

这是你目前的调用方式:

xid = mgr.submitJob({"model":"nerf"})

为了符合submitJob方法接受关键字参数的定义,你应该像这样调用它:

xid = mgr.submitJob(model="nerf")

这样,{"model":"nerf"}中的"model"将成为关键字参数的名称,而"nerf"将是该参数的值。然后,这个关键字参数会被包含在submitJob方法接收的kwargs字典中。

如果你有多个参数要传递给submitJob,你也可以这样做:

xid = mgr.submitJob(model="nerf", another_param="value", ...)

在这种情况下,所有的参数都将作为关键字参数传递,并且在submitJob内部的kwargs字典中可用。

Marlboro

我用ubuntu安装了redis,安装的当时,redis服务启动了,但是重启后,redis服务没有启动,我应该怎么正确的启动redis服务,我可以找到 redis-server这个命令

Avatar
Avatar

在Ubuntu系统上,如果你通过包管理器(如apt)安装了Redis,那么Redis通常会配置为使用Systemd服务自动启动。如果Redis在重启后没有自动启动,你可以手动启动它,确保它设置为在启动时自动运行,或者检查是否有任何问题阻止了它的启动。

首先,手动启动Redis服务:

sudo systemctl start redis-server

确认Redis服务状态:

sudo systemctl status redis-server

如果你希望Redis在系统启动时自动启动,确保它被设置为开机自启动:

sudo systemctl enable redis-server

如果Redis服务没有正常启动,你可以检查日志文件获取更多信息:

sudo journalctl -u redis-server

这将显示Redis服务日志,可能会包含关于启动失败的详细信息。

如果你是通过手动下载和编译Redis源码来安装的,或者通过其他非标准方式安装的,你可能需要创建一个Systemd服务单元文件来管理Redis服务。这通常涉及到在/etc/systemd/system/目录下创建一个名为redis.service的文件,并配置适当的服务参数。

这是一个基本的Systemd服务单元文件示例,用于管理Redis服务(假设你的redis-server可执行文件位于/usr/local/bin/redis-server,并且你的配置文件位于/etc/redis/redis.conf):

[Unit]
Description=Redis In-Memory Data Store
After=network.target

[Service]
ExecStart=/usr/local/bin/redis-server /etc/redis/redis.conf
ExecStop=/usr/local/bin/redis-cli shutdown
Restart=always

[Install]
WantedBy=multi-user.target

你需要根据实际安装的位置调整ExecStartExecStop路径。创建好服务单元文件后,重新加载Systemd守护进程,启动Redis服务,并启用开机自启动:

sudo systemctl daemon-reload
sudo systemctl start redis.service
sudo systemctl enable redis.service

请确保使用正确的文件名和路径替换示例中的redis.service/usr/local/bin/redis-server/etc/redis/redis.conf

Marlboro

ubuntu下有好用的redis 桌面管理器吗

Avatar
Avatar

在Ubuntu下,你可以使用一些图形界面的Redis桌面管理器来方便地管理你的Redis实例。以下是一些流行的选项:

  1. Redis Desktop Manager (RDM): Redis Desktop Manager 是一个跨平台的桌面Redis客户端,支持Linux、Windows和macOS。它是开源软件,但官方版是付费的。你可以从它的官网下载和安装,或者尝试从其他渠道(如Snapcraft)获取。

    安装方法(通过Snap):

    sudo snap install redis-desktop-manager
    
  2. Another Redis Desktop Manager: 这是一个开源的、更现代化的Redis桌面管理器,它是完全免费的,并且也支持多个平台。它的用户界面基于Electron构建。

    安装方法:

    • 你可以从GitHub仓库的发布页面下载.AppImage文件或.deb安装包。
    • 使用.AppImage文件,你可能需要先给它执行权限:
      chmod +x another-redis-desktop-manager-*.AppImage
      ./another-redis-desktop-manager-*.AppImage
      
    • 使用.deb安装包:
      sudo dpkg -i another-redis-desktop-manager-*.deb
      
  3. FastoRedis: FastoRedis 是一个开源的Redis管理工具,可以用来管理本地和远程的Redis数据库。它支持多种Redis命令和数据格式。

    安装方法:

    • 下载.deb文件并安装:
      sudo dpkg -i fastoredis-*.deb
      
  4. Medis: Medis 是一个开源的、简洁的Redis管理应用程序。它提供了一个漂亮的界面和一些有用的特性,如支持键的模式匹配、自动格式化JSON等。

    Medis 目前没有官方的Linux版本,但是GitHub上有一些非官方的构建版本,或者你可以选择从源码编译运行。

  5. RedisInsight: RedisInsight 是Redis官方提供的一个免费的Redis数据库管理工具。它提供了一个直观的用户界面,支持数据可视化、慢查询分析等功能。

    安装方法:

    • 访问Redis官方网站下载对应的Linux安装文件。

请注意,由于Linux发行版和软件版本的不断更新,安装方法可能会随着时间而变化。确保从官方网站或可信的来源下载最新版本的安装包,并遵循其提供的安装说明进行安装。