“分而治之”中的零负载均衡

2024-06-09 15:57:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在复制zguide2的zeroMQ的Divide & Conquer example。它使用呼吸机将任务推给几个工人,然后将结果发送到水槽。你知道吗

一切正常。然而,如果我在模拟一个较慢的客户机或非常不平衡的任务,那么运行时间远不是最佳的。例如,这可以通过添加行来实现

if(task_nbr % cpu_count() == 0):
        workload *= 4

ventilator中的workload = random.randint(1, 100)之后。你知道吗

我试图将接收器(工作者)和发送器(呼吸机)的水位降到最高点,但没有改进运行时间。你知道吗

错误可能是在选择套接字类型“PUB”/“PULL”时发生的?你知道吗

如果需要,我可以附加一个最小的工作示例,但是由于工人通风槽结构的原因,它有点长(大约150行)。你知道吗


Tags: task客户机ifexample时间cpuzeromq水槽
1条回答
网友
1楼 · 发布于 2024-06-09 15:57:33

在这种情况下,最好使用ROUTER and REQ sockets。这在python中是可能的

client = context.socket(zmq.ROUTER)

以及

worker = context.socket(zmq.REQ)

Jeremy Avnet给出的一个完整的例子可以在in the zguide中找到。可以观察到,即使添加了问题的代码,运行时也将接近最优。你知道吗

The Load Balancing Pattern一节中也描述了这项工作的原因:

workers send a "ready" message when they start, and after they finish each task. The broker reads these messages one-by-one. Each time it reads a message, it is from the last used worker. And because we're using a ROUTER socket, we get an identity that we can then use to send a task back to the worker

相关问题 更多 >