开机几分钟后zmq.Context()会挂起

时间:2018-07-12 10:09:38

标签: python c python-3.x zeromq pyzmq

在一个非常小的不工作示例中,我这样做:

import zmq
ctx = zmq.Context()

python3 -c "import zmq; ctx = zmq.Context()"

当我的机器运行了几分钟后,这很好用。但是,启动后(大约2分钟)就没有启动。它只是阻塞并且不间断(即使Ctrl+C也不起作用)。

在机器正常运行的前几分钟内,可能会出现哪些冲突的想法?

信息:libzmq5版本为4.2.5和pyzmq 17.0.0。

编辑:与C example的行为相同。

Edit2:感谢strace,我知道它挂在系统调用getrandom(上。据我所知,似乎是向/dev/random发出请求,而不是使用/dev/urandom来获得足够的熵。实际上,cat /dev/random也会被阻止,而cat /dev/urandom不会。

1 个答案:

答案 0 :(得分:0)

您确定它实际上挂在那里吗?我有同样的问题,但我一直认为与加密进行第一次连接时会挂起。

问题在于启动时内核没有熵,并且从/ dev / random或/ dev / urandom读取挂起。使用zmq之前,需要在启动时创建一些熵。通常,随机种子在关闭时存储,并在引导时用于播种熵。在使用zmq之前,请确保发生了这种情况,并且它起作用。

就我而言,我不得不使用hadgd向系统添加熵。

注意:熵必须在zmq启动之前存在。不要问我为什么。我也很想知道。