From 9d70e83221e8007e325bd218e2641baaae211670 Mon Sep 17 00:00:00 2001 From: Alex Willmer Date: Thu, 22 Jan 2026 13:49:38 +0000 Subject: [PATCH] mitogen: Consolidate `range` & `xrange` polyfills -> `mitogen.core.range` --- docs/changelog.rst | 2 ++ mitogen/core.py | 2 ++ mitogen/minify.py | 2 +- mitogen/parent.py | 5 ++--- mitogen/select.py | 2 +- mitogen/service.py | 2 +- tests/bench/connection/fork_lifecycle.py | 7 +------ tests/bench/connection/fork_roundtrip.py | 6 +----- tests/bench/connection/local_lifecycle.py | 2 +- tests/bench/connection/ssh_roundtrip.py | 4 ---- tests/bench/large_messages.py | 2 +- tests/bench/latch_roundtrip.py | 2 +- tests/soak/cpu_load.py | 4 +++- 13 files changed, 17 insertions(+), 25 deletions(-) diff --git a/docs/changelog.rst b/docs/changelog.rst index 0578ba07..e3c2dbcf 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -28,6 +28,8 @@ In progress (unreleased) * :gh:issue:`1424` tests: Standardise output of connection benchmarks * :gh:issue:`1424` tests: Parameterize throughput benchmark * :gh:issue:`1424` tests: Parameterize large message benchmark +* :gh:issue:`1424` :mod:`mitogen`: Consolidate all ``range`` and ``xrange`` + polyfills into :attr:`mitogen.core.range` v0.3.37 (2026-01-08) diff --git a/mitogen/core.py b/mitogen/core.py index 666905ca..3bd23b35 100644 --- a/mitogen/core.py +++ b/mitogen/core.py @@ -227,6 +227,7 @@ if sys.version_info >= (3, 0): BufferType = lambda buf, start: memoryview(buf)[start:] integer_types = (int,) iteritems, iterkeys, itervalues = dict.items, dict.keys, dict.values + range = range else: import cPickle as pickle import thread @@ -238,6 +239,7 @@ else: UnicodeType = unicode integer_types = (int, long) iteritems, iterkeys, itervalues = dict.iteritems, dict.iterkeys, dict.itervalues + range = xrange AnyTextType = (BytesType, UnicodeType) diff --git a/mitogen/minify.py b/mitogen/minify.py index 09fdc4eb..8f78b2ab 100644 --- a/mitogen/minify.py +++ b/mitogen/minify.py @@ -104,7 +104,7 @@ def strip_docstrings(tokens): elif typ == tokenize.NEWLINE: stack.append(t) start_line, end_line = stack[0][2][0], stack[-1][3][0]+1 - for i in range(start_line, end_line): + for i in mitogen.core.range(start_line, end_line): yield tokenize.NL, '\n', (i, 0), (i,1), '\n' for t in stack: if t[0] in (tokenize.DEDENT, tokenize.INDENT): diff --git a/mitogen/parent.py b/mitogen/parent.py index 721e3c0e..9d1a0ce3 100644 --- a/mitogen/parent.py +++ b/mitogen/parent.py @@ -80,7 +80,6 @@ except IOError: if sys.version_info >= (3, 0): - xrange = range closure_attr = '__closure__' IM_SELF_ATTR = '__self__' else: @@ -1729,7 +1728,7 @@ class ChildIdAllocator(object): def __init__(self, router): self.router = router self.lock = threading.Lock() - self.it = iter(xrange(0)) + self.it = iter(mitogen.core.range(0)) def allocate(self): """ @@ -1753,7 +1752,7 @@ class ChildIdAllocator(object): start, end = master.send_await( mitogen.core.Message(dst_id=0, handle=mitogen.core.ALLOCATE_ID) ) - self.it = iter(xrange(start, end)) + self.it = iter(mitogen.core.range(start, end)) finally: self.lock.release() diff --git a/mitogen/select.py b/mitogen/select.py index 2d87574f..d719f78c 100644 --- a/mitogen/select.py +++ b/mitogen/select.py @@ -233,7 +233,7 @@ class Select(object): # the underlying receivers. We handle the possibility of receivers # marked notified yet empty inside Select.get(), so this should be # robust. - for _ in range(recv.size()): + for _ in mitogen.core.range(recv.size()): self._put(recv) not_present_msg = 'Instance is not a member of this Select' diff --git a/mitogen/service.py b/mitogen/service.py index f82d18ad..b852f44d 100644 --- a/mitogen/service.py +++ b/mitogen/service.py @@ -523,7 +523,7 @@ class Pool(object): self.add(service) self._py_24_25_compat() self._threads = [] - for x in range(size): + for x in mitogen.core.range(size): name = 'mitogen.Pool.%04x.%d' % (id(self) & 0xffff, x,) thread = threading.Thread( name=name, diff --git a/tests/bench/connection/fork_lifecycle.py b/tests/bench/connection/fork_lifecycle.py index cafe835b..6491c69b 100644 --- a/tests/bench/connection/fork_lifecycle.py +++ b/tests/bench/connection/fork_lifecycle.py @@ -5,11 +5,6 @@ Measure latency of .fork() setup/teardown. import mitogen import mitogen.core -try: - xrange -except NameError: - xrange = range - @mitogen.main() def main(router): @@ -22,7 +17,7 @@ def main(router): opts, args = parser.parse_args() t0 = mitogen.core.now() - for x in xrange(opts.iterations): + for x in mitogen.core.range(opts.iterations): t = mitogen.core.now() ctx = router.fork(debug=opts.debug) ctx.shutdown(wait=True) diff --git a/tests/bench/connection/fork_roundtrip.py b/tests/bench/connection/fork_roundtrip.py index 9ae3abae..ac5be2d5 100644 --- a/tests/bench/connection/fork_roundtrip.py +++ b/tests/bench/connection/fork_roundtrip.py @@ -9,10 +9,6 @@ import ansible_mitogen.affinity mitogen.utils.setup_gil() ansible_mitogen.affinity.policy.assign_worker() -try: - xrange -except NameError: - xrange = range def do_nothing(): pass @@ -30,7 +26,7 @@ def main(router): f = router.fork(debug=opts.debug) f.call(do_nothing) t0 = mitogen.core.now() - for x in xrange(opts.iterations): + for x in mitogen.core.range(opts.iterations): f.call(do_nothing) t1 = mitogen.core.now() diff --git a/tests/bench/connection/local_lifecycle.py b/tests/bench/connection/local_lifecycle.py index d48a5ab8..1c6bd07b 100644 --- a/tests/bench/connection/local_lifecycle.py +++ b/tests/bench/connection/local_lifecycle.py @@ -23,7 +23,7 @@ def main(router): opts, args = parser.parse_args() t0 = mitogen.core.now() - for x in range(opts.iterations): + for x in mitogen.core.range(opts.iterations): t = mitogen.core.now() f = router.local(debug=opts.debug) tt = mitogen.core.now() diff --git a/tests/bench/connection/ssh_roundtrip.py b/tests/bench/connection/ssh_roundtrip.py index 9358f946..6afe7da5 100644 --- a/tests/bench/connection/ssh_roundtrip.py +++ b/tests/bench/connection/ssh_roundtrip.py @@ -11,10 +11,6 @@ import ansible_mitogen.affinity mitogen.utils.setup_gil() ansible_mitogen.affinity.policy.assign_worker() -try: - xrange -except NameError: - xrange = range def do_nothing(): pass diff --git a/tests/bench/large_messages.py b/tests/bench/large_messages.py index 7f4aea01..823548d4 100644 --- a/tests/bench/large_messages.py +++ b/tests/bench/large_messages.py @@ -20,7 +20,7 @@ def main(router): s = ' ' * n t0 = mitogen.core.now() - for x in range(opts.iterations): + for x in mitogen.core.range(opts.iterations): tt0 = mitogen.core.now() assert n == c.call(len, s) diff --git a/tests/bench/latch_roundtrip.py b/tests/bench/latch_roundtrip.py index cbc48374..b28fd523 100644 --- a/tests/bench/latch_roundtrip.py +++ b/tests/bench/latch_roundtrip.py @@ -15,7 +15,7 @@ X = 20000 def flip_flop(ready, inp, out): ready.put(None) - for x in xrange(X): + for x in mitogen.core.range(X): inp.get() out.put(None) diff --git a/tests/soak/cpu_load.py b/tests/soak/cpu_load.py index cfc65896..f97bf867 100644 --- a/tests/soak/cpu_load.py +++ b/tests/soak/cpu_load.py @@ -8,6 +8,8 @@ import ctypes import multiprocessing import os +import mitogen.core + LIBC = ctypes.CDLL('libc.so.6') sched_yield = LIBC.sched_yield @@ -19,7 +21,7 @@ def burn(): (ord(b) << 8) | (ord(c) << 0)) / 1.6) print(n) - for x in xrange(n): pass + for x in mitogen.core.range(n): pass sched_yield() mul = 1.5