summaryrefslogtreecommitdiff
path: root/gear
diff options
context:
space:
mode:
authorAhmon Dancy <adancy@wikimedia.org>2020-07-27 14:46:49 -0700
committerAntoine Musso <hashar@free.fr>2021-03-10 18:15:07 +0100
commita160d10735c62e046b72e31e8eb7756c5f06e09f (patch)
treee35d97523d5df86294d2ac3c7add78cf4d8f1ae9 /gear
parent089471c8fbe655ae1e519fb415394aa9485a6554 (diff)
downloadgear-a160d10735c62e046b72e31e8eb7756c5f06e09f.tar.gz
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
Diffstat (limited to 'gear')
-rw-r--r--gear/__init__.py9
1 files changed, 8 insertions, 1 deletions
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)):