小编Hot*_*PxL的帖子

Python中的Redis AUTH命令

我在Python 2中使用redis-py绑定来连接到我的Redis服务器.服务器需要密码.我不知道如何AUTH在Python中建立连接.

以下代码不起作用:

import redis
r = redis.StrictRedis()
r.auth('pass')
Run Code Online (Sandbox Code Playgroud)

它说:

'StrictRedis'对象没有属性'auth'

也,

r = redis.StrictRedis(auth='pass')
Run Code Online (Sandbox Code Playgroud)

也不起作用.没有这样的关键字参数

我以前在其他语言中使用过Redis绑定,通常方法名称与Redis命令一致.所以我猜想r.auth会发送AUTH,但不幸的是它没有这种方法.

那么标准方式是AUTH什么?还有,为什么叫这个StrictRedisStrict这里的意思是什么?

python redis

15
推荐指数
2
解决办法
2万
查看次数

如何在C++中创建临时对象

我有以下代码.

class A {
 public:
  A(int) {
  }
};

int a;
int main() {
  A(a);  // Line 'a
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

我想在第一行做的是A用构造函数创建一个临时的A::A(int).我知道它会立即毁灭.这就是我想要的.但似乎编译器正在做一些等价的事情A a,a在类中定义变量A并使用构造函数初始化它A::A().当然它不存在,因此编译错误.

但是,如果我将我的代码更改为以下内容.

class A {
 public:
  A(int) {
  }
};

void f(A) {
}

int a;
int main() {
  f(A(a));
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

它现在工作正常.编译器构造一个临时的A并使用它来调用f.

为什么A(a)两种情况都不同?它是如何在标准中或出于某些模糊的原因陈述的?如何在第一个代码示例中构造临时对象?

c++

15
推荐指数
2
解决办法
3964
查看次数

Ctrl-C 如何通过 tmux 传播

我知道当我按下 Ctrl-C 时,操作系统 pts 系统会解释它并将 a 发送SIGINT到前台进程组。我只是想知道它是如何通过tmux.

假设我正在运行带有 X 服务器和窗口管理器的普通 Linux。我打开了xterm一个zsh正在运行的tmux. 在这方面,tmux我正在运行 abash并在其中运行a ./a.out

进程树像window manager-> xterm-> zsh-> tmux client。然后tmux server-> bash-> ./a.out

因此,当我在键盘上按下 Ctrl-C 时,X 服务器首先捕获它并告诉活动窗口xterm“嘿,这家伙只是按下了 Ctrl-C”。通过向伪终端发送一个“Ctrl-C”字符,xterm告诉它直接运行的进程 ( zsh) 我按下了 Ctrl-C pts/0。操作系统在伪终端中看到“Ctrl-C”字符并将其转换为 aSIGINT到前台进程组(即zshtmux client)。然后tmux client必须已收到此SIGINT所以它告诉tmux servertmux …

linux tmux

8
推荐指数
1
解决办法
1483
查看次数

如何在C++中强制使用奇怪的重复模板模式

我有以下基本模板类.

template<typename T>
class Base {
  public:
    void do_something() {
    }
};
Run Code Online (Sandbox Code Playgroud)

它旨在用作奇怪的重复模板模式.它应该是继承的class B : public Base<B>.它不能像继承一样继承class B : public Base<SomeoneElse>.我想静态地执行这个要求.如果有人使用了这个错误,我预计编译阶段会出错.

我正在做的是把一个static_cast<T const&>(*this)do_something().这样,继承模板的类是继承自作为模板参数提供的类.抱歉这个令人困惑的表情.用简单的英语,它需要B是或继承SomeoneElseclass B : public Base<SomeoneElse>.

我不知道这是否是实现这一目标的最佳方式.看起来很粗鲁.

但是我想做更多.我想确保BSomeoneElse本身.我怎样才能做到这一点?

c++ inheritance templates crtp

7
推荐指数
2
解决办法
586
查看次数

为什么fmt.Printf在Go中接受%x的字节数组

我是Go的新手.我想知道数组和切片之间的确切区别,所以如果我对规范过于痴迷,请原谅我.

在对包的文档fmt,它说的Printf%x可以接受的字节串和切片.它没有说明字节数组.但事实上,如果我在其中放入一个字节数组,它打印出来也很好!

package main

import (
  "fmt"
)

func main() {
  var b [6]byte
  for i := 0; i < 6; i++ {
    b[i] = 'a'
  }
  fmt.Printf("%s\n", b) // "aaaaaa"
}
Run Code Online (Sandbox Code Playgroud)

谁能告诉我为什么?AFAIK,字节数组和切片不能隐式转换为彼此.

感谢您阅读我的问题!

go

6
推荐指数
1
解决办法
2106
查看次数

Clang不能将支撑初始化用于用户定义的转换

代码如下.

struct A {
  A() {}
};

struct B {
  B() {}
  explicit operator A() { return A{}; }
};

struct C {
  A a;
  C(B b) : a{b} {}
};
Run Code Online (Sandbox Code Playgroud)

我有一个struct A不是聚合可构造的(因为它有一个构造函数定义).同样的道理struct B.但它也有一个明确的用户定义转换运算符struct A.现在struct C的构造函数需要一个struct B,并使用它来构造struct A.就像在cppreference上一样,转换运算符可以参与直接初始化,我相信这是成员初始化的情况struct C.它传递给GCC 5.2(C++ 11).但是它在Clang 3.6上失败了.我试过C++ 11,C++ 14和C++ 1z.

如果我换a{b}a(b),它会传递给Clang和GCC.

我想知道这是一个Clang bug还是我误解了标准?

c++ c++11

6
推荐指数
1
解决办法
203
查看次数

如何在Infiniband中使用GPUDirect RDMA

我有两台机器.每台机器上都有多张特斯拉卡.每台机器上都有一张InfiniBand卡.我想通过InfiniBand在不同机器上的GPU卡之间进行通信.只需点对点单播即可.我当然希望使用GPUDirect RDMA,这样我就可以省去额外的复制操作.

我知道Mellanox现在有一款可用于其InfiniBand卡的驱动程序.但它没有提供详细的开发指南.另外我知道OpenMPI支持我要求的功能.但OpenMPI对于这个简单的任务来说太重了,它不支持单个进程中的多个GPU.

我想知道我是否可以直接使用驱动程序进行通信.代码示例,教程,任何事情都会很好.此外,如果有人能帮助我在OpenMPI中找到处理此问题的代码,我将不胜感激.

cuda openmpi infiniband gpudirect

4
推荐指数
1
解决办法
2539
查看次数

setInterval()使Node.js进程保持运行

我在CoffeeScript中编写类似于令牌桶的东西.

class TokenBucket
  constructor: (@speed, @threshold) ->
    @currentVolume = 0
    @interval = setInterval =>
      @currentVolume += 1
      if @threshold < @currentVolume
        @currentVolume = @threshold
    , @speed * 1000

  stop: ->
    clearInterval @interval
    return

  get: ->
    if @currentVolume == 0
      false
    else
      @currentVolume -= 1
      true
Run Code Online (Sandbox Code Playgroud)

对于不熟悉CoffeeScript的人,让我简单解释一下.在构造a之后TokenBucket,它setInterval使用回调来调用,该回调每隔几秒递增一次"桶".

问题是,如果用户忘记stop在现有之前调用,那么setInterval将继续运行Node.js进程,因为事件循环永远不会为空.我想要做的是告诉Node.js这setInterval不重要,如果其他一切都完成,你可以终止它.我怎样才能做到这一点?

javascript node.js coffeescript

3
推荐指数
1
解决办法
950
查看次数

OS如何在虚拟内存中执行二进制文件?

例如,在我的程序中,我调用了函数foo().编译器和汇编器最终会写入jmp someaddr二进制文件.我知道虚拟内存的概念.该程序会认为它具有整个记忆,并且起始位置是0x000.通过这种方式,汇编程序可以计算foo()的位置.

但实际上直到运行时才决定这个?我必须运行该程序才能知道我将程序加载到哪里,因此该地址jmp.但是当程序实际运行时,操作系统是如何进入并更改地址的jmp?这些是直接的CPU指令吗?

c assembly

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