From a160d10735c62e046b72e31e8eb7756c5f06e09f Mon Sep 17 00:00:00 2001 From: Ahmon Dancy Date: Mon, 27 Jul 2020 14:46:49 -0700 Subject: wakeConnections: Randomize connections before scanning them gear/__init__.py: Modified Server.wakeConnections() so that it randomizes the list of active connections before sending out NOOP's to them. This will hopefully spread workload across machines more evenly when there are multiple workers per machine. Reference: https://phabricator.wikimedia.org/T258630 Change-Id: I05dcb9fa383f3aefc8b5b1bb9dd8b3ff6ff7f37d --- gear/__init__.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/gear/__init__.py b/gear/__init__.py index f7fc767..4a0fcb7 100644 --- a/gear/__init__.py +++ b/gear/__init__.py @@ -15,6 +15,7 @@ import errno import logging import os +import random import select import six import socket @@ -3295,7 +3296,13 @@ class Server(BaseClientServer): def wakeConnections(self, job=None): p = Packet(constants.RES, constants.NOOP, b'') - for connection in self.active_connections: + + # Use a randomized copy of active_connections to try + # to spread workload across the machines that workers are on. + conns = self.active_connections[:] + random.shuffle(conns) # Modifies the list + + for connection in conns: if connection.state == 'SLEEP': if ((job and job.name in connection.functions) or (job is None)): -- cgit v1.2.1