1
11
你似乎认为你在试图避免一种简单的种族状况,比如
但我认为问题在于公平排队(循环)使得事情变得更加困难:你甚至可能已经对你的工作人员有了几个排队的请求。如果轮到发送者接收新请求,则发送者不会在发送新请求之前等待您的工作人员空闲,因此在您致电时
实际上,您可能选择了错误的数据方向。不要让请求池向您的工作人员发送请求(即使您不希望接收新请求),您可能希望让工作人员从请求队列中获取新请求,处理好它,然后发送答案。
当然,这意味着使用
编辑: 我写 some code 实施 the other direction 解释我的意思。 |
2
3
我认为问题在于您的消息体系结构是错误的。您的工作人员应该使用REQ套接字发送工作请求,这样工作人员就只有一个作业排队。然后,为了确认工作的完成,您可以使用另一个REQ请求,该请求加倍作为前一个作业的ACK并请求新的REQ请求,或者您可以拥有第二个控制套接字。 有些人使用pub/sub进行控制,以便每个工人发布ack,而master订阅它们。 您必须记住,使用zeromq时,有0个消息队列。一点也没有!根据设置(如高水位线和插座类型),只在发送器或接收器中缓冲消息。如果您确实需要消息队列,那么您需要编写一个代理应用程序来处理这个问题,或者只需切换到AMQP,其中所有通信都通过第三方代理进行。 |
3
2
我也在考虑这个问题。您可能希望实现一条关闭消息,通知客户工人将要离开。然后你可以让工人在关机前先排干一段时间。当然不理想,但可能可行。 |
4
0
在尽可能快地向工人发送请求和在工作崩溃或死亡时获得可靠性之间存在利益冲突。ZeroMQ指南中有一个完整的部分解释了这个可靠性问题的不同答案。读一下,会有很大帮助的。 tl;dr工作者可以/将崩溃,客户机需要重新发送功能。该指南提供了多种语言的可重用代码。 |
5
-1
最简单的解决方案不是让客户在等待回复时超时,然后在没有收到回复时重试吗? |
6
-3
试着在呼叫结束前睡觉。这在2.1中是固定的,但在2.0中还没有固定。 |
July · 如何定义数字间隔,然后四舍五入 1 年前 |
user026 · 如何根据特定窗口的平均值(行数)创建新列? 1 年前 |
Ashok Shrestha · 需要追踪特定的颜色线并获取坐标 1 年前 |
Nicote Ool · 在FastApi和Vue3中获得422 1 年前 |
Abdulaziz · 如何对集合内的列表进行排序[重复] 1 年前 |
asmgx · 为什么合并数据帧不能按照python中的预期方式工作 1 年前 |