在一个非常小的不工作示例中,我这样做:
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
不会。
答案 0 :(得分:0)
您确定它实际上挂在那里吗?我有同样的问题,但我一直认为与加密进行第一次连接时会挂起。
问题在于启动时内核没有熵,并且从/ dev / random或/ dev / urandom读取挂起。使用zmq之前,需要在启动时创建一些熵。通常,随机种子在关闭时存储,并在引导时用于播种熵。在使用zmq之前,请确保发生了这种情况,并且它起作用。
就我而言,我不得不使用hadgd向系统添加熵。
注意:熵必须在zmq启动之前存在。不要问我为什么。我也很想知道。