gpt4 book ai didi

python - zeromq:如何防止无限等待?

转载 作者:IT老高 更新时间:2023-10-28 21:41:49 24 4
gpt4 key购买 nike

我刚开始使用 ZMQ。我正在设计一个应用程序,其工作流程是:

  1. 众多客户端之一(具有随机 PULL 地址)向 5555 的服务器推送请求
  2. 服务器一直在等待客户端推送。当一个请求出现时,会为该特定请求生成一个工作进程。是的,工作进程可以同时存在。
  3. 当该进程完成其任务时,它会将结果推送给客户端。

我假设 PUSH/PULL 架构适合此。请对此纠正我


但是我该如何处理这些情况呢?

  1. 当服务器无法响应时,client_receiver.recv() 将无限等待。
  2. 客户端可能会发送请求,但它会立即失败,因此工作进程将永远停留在 server_sender.send()。

那么如何在 PUSH/PULL 模型中设置超时


编辑:感谢 user938949 的建议,我得到了一个有效的答案,我将其分享给后代。

最佳答案

如果您使用 zeromq >= 3.0,那么您可以设置 RCVTIMEO 套接字选项:

client_receiver.RCVTIMEO = 1000 # in milliseconds

但一般情况下,您可以使用轮询器:

poller = zmq.Poller()
poller.register(client_receiver, zmq.POLLIN) # POLLIN for recv, POLLOUT for send

poller.poll() 需要超时:

evts = poller.poll(1000) # wait *up to* one second for a message to arrive.

evts 将是一个空列表,如果没有可以接收。

您可以使用 zmq.POLLOUT 进行轮询,以检查发送是否成功。

或者,为了处理可能失败的对等点的情况,a:

worker.send(msg, zmq.NOBLOCK)

可能就足够了,它总是会立即返回 - 如果发送无法完成,则会引发 ZMQError(zmq.EAGAIN)。

关于python - zeromq:如何防止无限等待?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7538988/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com