CINXE.COM
Changelog - gevent 24.11.2.dev0 documentation
<!doctype html> <html class="no-js" lang="en" data-content_root="./"> <head><meta charset="utf-8"/> <meta name="viewport" content="width=device-width,initial-scale=1"/> <meta name="color-scheme" content="light dark"><meta name="viewport" content="width=device-width, initial-scale=1" /> <link rel="index" title="Index" href="genindex.html" /><link rel="search" title="Search" href="search.html" /><link rel="next" title="Changes for 1.5" href="changelog_1_5.html" /><link rel="prev" title="Installation and Requirements" href="install.html" /> <!-- Generated with Sphinx 8.1.3 and Furo 2024.08.06 --> <title>Changelog - gevent 24.11.2.dev0 documentation</title> <link rel="stylesheet" type="text/css" href="_static/pygments.css?v=a3258c64" /> <link rel="stylesheet" type="text/css" href="_static/styles/furo.css?v=354aac6f" /> <link rel="stylesheet" type="text/css" href="_static/styles/furo-extensions.css?v=302659d7" /> <link rel="stylesheet" type="text/css" href="_static/custom.css?v=e405f49d" /> <style> body { --color-code-background: #eeeedd; --color-code-foreground: black; --color-brand-primary: #7c9a5e; --color-brand-content: #7c9a5e; --color-foreground-border: #b7d897; --font-stack: "SF Pro",-apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji"; --font-stack--monospace: "JetBrainsMono", "JetBrains Mono", "JetBrains Mono Regular", "JetBrainsMono-Regular", ui-monospace, profont, monospace; } @media not print { body[data-theme="dark"] { --color-code-background: #202020; --color-code-foreground: #d0d0d0; } @media (prefers-color-scheme: dark) { body:not([data-theme="light"]) { --color-code-background: #202020; --color-code-foreground: #d0d0d0; } } } </style><script async type="text/javascript" src="/_/static/javascript/readthedocs-addons.js"></script><meta name="readthedocs-project-slug" content="python-gevent" /><meta name="readthedocs-version-slug" content="latest" /><meta name="readthedocs-resolver-filename" content="/changelog.html" /><meta name="readthedocs-http-status" content="200" /></head> <body> <script> document.body.dataset.theme = localStorage.getItem("theme") || "auto"; </script> <svg xmlns="http://www.w3.org/2000/svg" style="display: none;"> <symbol id="svg-toc" viewBox="0 0 24 24"> <title>Contents</title> <svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 1024 1024"> <path d="M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM115.4 518.9L271.7 642c5.8 4.6 14.4.5 14.4-6.9V388.9c0-7.4-8.5-11.5-14.4-6.9L115.4 505.1a8.74 8.74 0 0 0 0 13.8z"/> </svg> </symbol> <symbol id="svg-menu" viewBox="0 0 24 24"> <title>Menu</title> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-menu"> <line x1="3" y1="12" x2="21" y2="12"></line> <line x1="3" y1="6" x2="21" y2="6"></line> <line x1="3" y1="18" x2="21" y2="18"></line> </svg> </symbol> <symbol id="svg-arrow-right" viewBox="0 0 24 24"> <title>Expand</title> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-chevron-right"> <polyline points="9 18 15 12 9 6"></polyline> </svg> </symbol> <symbol id="svg-sun" viewBox="0 0 24 24"> <title>Light mode</title> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="feather-sun"> <circle cx="12" cy="12" r="5"></circle> <line x1="12" y1="1" x2="12" y2="3"></line> <line x1="12" y1="21" x2="12" y2="23"></line> <line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line> <line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line> <line x1="1" y1="12" x2="3" y2="12"></line> <line x1="21" y1="12" x2="23" y2="12"></line> <line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line> <line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line> </svg> </symbol> <symbol id="svg-moon" viewBox="0 0 24 24"> <title>Dark mode</title> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-moon"> <path stroke="none" d="M0 0h24v24H0z" fill="none" /> <path d="M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z" /> </svg> </symbol> <symbol id="svg-sun-with-moon" viewBox="0 0 24 24"> <title>Auto light/dark, in light mode</title> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-custom-derived-from-feather-sun-and-tabler-moon"> <path style="opacity: 50%" d="M 5.411 14.504 C 5.471 14.504 5.532 14.504 5.591 14.504 C 3.639 16.319 4.383 19.569 6.931 20.352 C 7.693 20.586 8.512 20.551 9.25 20.252 C 8.023 23.207 4.056 23.725 2.11 21.184 C 0.166 18.642 1.702 14.949 4.874 14.536 C 5.051 14.512 5.231 14.5 5.411 14.5 L 5.411 14.504 Z"/> <line x1="14.5" y1="3.25" x2="14.5" y2="1.25"/> <line x1="14.5" y1="15.85" x2="14.5" y2="17.85"/> <line x1="10.044" y1="5.094" x2="8.63" y2="3.68"/> <line x1="19" y1="14.05" x2="20.414" y2="15.464"/> <line x1="8.2" y1="9.55" x2="6.2" y2="9.55"/> <line x1="20.8" y1="9.55" x2="22.8" y2="9.55"/> <line x1="10.044" y1="14.006" x2="8.63" y2="15.42"/> <line x1="19" y1="5.05" x2="20.414" y2="3.636"/> <circle cx="14.5" cy="9.55" r="3.6"/> </svg> </symbol> <symbol id="svg-moon-with-sun" viewBox="0 0 24 24"> <title>Auto light/dark, in dark mode</title> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-custom-derived-from-feather-sun-and-tabler-moon"> <path d="M 8.282 7.007 C 8.385 7.007 8.494 7.007 8.595 7.007 C 5.18 10.184 6.481 15.869 10.942 17.24 C 12.275 17.648 13.706 17.589 15 17.066 C 12.851 22.236 5.91 23.143 2.505 18.696 C -0.897 14.249 1.791 7.786 7.342 7.063 C 7.652 7.021 7.965 7 8.282 7 L 8.282 7.007 Z"/> <line style="opacity: 50%" x1="18" y1="3.705" x2="18" y2="2.5"/> <line style="opacity: 50%" x1="18" y1="11.295" x2="18" y2="12.5"/> <line style="opacity: 50%" x1="15.316" y1="4.816" x2="14.464" y2="3.964"/> <line style="opacity: 50%" x1="20.711" y1="10.212" x2="21.563" y2="11.063"/> <line style="opacity: 50%" x1="14.205" y1="7.5" x2="13.001" y2="7.5"/> <line style="opacity: 50%" x1="21.795" y1="7.5" x2="23" y2="7.5"/> <line style="opacity: 50%" x1="15.316" y1="10.184" x2="14.464" y2="11.036"/> <line style="opacity: 50%" x1="20.711" y1="4.789" x2="21.563" y2="3.937"/> <circle style="opacity: 50%" cx="18" cy="7.5" r="2.169"/> </svg> </symbol> <symbol id="svg-pencil" viewBox="0 0 24 24"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-pencil-code"> <path d="M4 20h4l10.5 -10.5a2.828 2.828 0 1 0 -4 -4l-10.5 10.5v4" /> <path d="M13.5 6.5l4 4" /> <path d="M20 21l2 -2l-2 -2" /> <path d="M17 17l-2 2l2 2" /> </svg> </symbol> <symbol id="svg-eye" viewBox="0 0 24 24"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-eye-code"> <path stroke="none" d="M0 0h24v24H0z" fill="none" /> <path d="M10 12a2 2 0 1 0 4 0a2 2 0 0 0 -4 0" /> <path d="M11.11 17.958c-3.209 -.307 -5.91 -2.293 -8.11 -5.958c2.4 -4 5.4 -6 9 -6c3.6 0 6.6 2 9 6c-.21 .352 -.427 .688 -.647 1.008" /> <path d="M20 21l2 -2l-2 -2" /> <path d="M17 17l-2 2l2 2" /> </svg> </symbol> </svg> <input type="checkbox" class="sidebar-toggle" name="__navigation" id="__navigation"> <input type="checkbox" class="sidebar-toggle" name="__toc" id="__toc"> <label class="overlay sidebar-overlay" for="__navigation"> <div class="visually-hidden">Hide navigation sidebar</div> </label> <label class="overlay toc-overlay" for="__toc"> <div class="visually-hidden">Hide table of contents sidebar</div> </label> <a class="skip-to-content muted-link" href="#furo-main-content">Skip to content</a> <div class="page"> <header class="mobile-header"> <div class="header-left"> <label class="nav-overlay-icon" for="__navigation"> <div class="visually-hidden">Toggle site navigation sidebar</div> <i class="icon"><svg><use href="#svg-menu"></use></svg></i> </label> </div> <div class="header-center"> <a href="contents.html"><div class="brand">gevent 24.11.2.dev0 documentation</div></a> </div> <div class="header-right"> <div class="theme-toggle-container theme-toggle-header"> <button class="theme-toggle"> <div class="visually-hidden">Toggle Light / Dark / Auto color theme</div> <svg class="theme-icon-when-auto-light"><use href="#svg-sun-with-moon"></use></svg> <svg class="theme-icon-when-auto-dark"><use href="#svg-moon-with-sun"></use></svg> <svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg> <svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg> </button> </div> <label class="toc-overlay-icon toc-header-icon" for="__toc"> <div class="visually-hidden">Toggle table of contents sidebar</div> <i class="icon"><svg><use href="#svg-toc"></use></svg></i> </label> </div> </header> <aside class="sidebar-drawer"> <div class="sidebar-container"> <div class="sidebar-sticky"><a class="sidebar-brand" href="contents.html"> <div class="sidebar-logo-container"> <img class="sidebar-logo" src="_static/5564530.png" alt="Logo"/> </div> </a><form class="sidebar-search-container" method="get" action="search.html" role="search"> <input class="sidebar-search" placeholder="Search" name="q" aria-label="Search"> <input type="hidden" name="check_keywords" value="yes"> <input type="hidden" name="area" value="default"> </form> <div id="searchbox"></div><div class="sidebar-scroll"><div class="sidebar-tree"> <ul class="current"> <li class="toctree-l1"><a class="reference internal" href="install.html">Installation and Requirements</a></li> <li class="toctree-l1 current has-children current-page"><a class="current reference internal" href="#">Changelog</a><input checked="" class="toctree-checkbox" id="toctree-checkbox-1" name="toctree-checkbox-1" role="switch" type="checkbox"/><label for="toctree-checkbox-1"><div class="visually-hidden">Toggle navigation of Changelog</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul> <li class="toctree-l2"><a class="reference internal" href="changelog_1_5.html">Changes for 1.5</a></li> <li class="toctree-l2"><a class="reference internal" href="changelog_1_4.html">Changes for 1.4</a></li> <li class="toctree-l2"><a class="reference internal" href="changelog_1_3.html">Changes for 1.3</a></li> <li class="toctree-l2"><a class="reference internal" href="changelog_1_2.html">Changes for 1.2</a></li> <li class="toctree-l2"><a class="reference internal" href="changelog_1_1.html">Changes for 1.1</a></li> <li class="toctree-l2"><a class="reference internal" href="changelog_1_0.html">Changes for 1.0</a></li> <li class="toctree-l2"><a class="reference internal" href="changelog_pre.html">Changes before gevent 1.0</a></li> </ul> </li> <li class="toctree-l1"><a class="reference internal" href="intro.html">Introduction</a></li> <li class="toctree-l1"><a class="reference internal" href="api/gevent.html"><code class="xref py py-mod docutils literal notranslate"><span class="pre">gevent</span></code> – common functions</a></li> <li class="toctree-l1"><a class="reference internal" href="api/gevent.greenlet.html">Greenlet Objects</a></li> <li class="toctree-l1"><a class="reference internal" href="servers.html">Implementing servers</a></li> <li class="toctree-l1 has-children"><a class="reference internal" href="dns.html">Name Resolution (DNS)</a><input class="toctree-checkbox" id="toctree-checkbox-2" name="toctree-checkbox-2" role="switch" type="checkbox"/><label for="toctree-checkbox-2"><div class="visually-hidden">Toggle navigation of Name Resolution (DNS)</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul> <li class="toctree-l2"><a class="reference internal" href="api/gevent.resolver.thread.html"><code class="xref py py-mod docutils literal notranslate"><span class="pre">gevent.resolver.thread</span></code> – thread based hostname resolver</a></li> <li class="toctree-l2"><a class="reference internal" href="api/gevent.resolver.ares.html"><code class="xref py py-mod docutils literal notranslate"><span class="pre">gevent.resolver.ares</span></code> – c-ares based hostname resolver</a></li> <li class="toctree-l2"><a class="reference internal" href="api/gevent.resolver.dnspython.html"><code class="xref py py-mod docutils literal notranslate"><span class="pre">gevent.resolver.dnspython</span></code> – Pure Python hostname resolver</a></li> <li class="toctree-l2"><a class="reference internal" href="api/gevent.resolver.blocking.html"><code class="xref py py-mod docutils literal notranslate"><span class="pre">gevent.resolver.blocking</span></code> – Non-cooperative resolver</a></li> </ul> </li> <li class="toctree-l1"><a class="reference internal" href="monitoring.html">Monitoring and Debugging gevent Applications</a></li> <li class="toctree-l1"><a class="reference internal" href="loop_impls.html">Event Loop Implementations: libuv and libev</a></li> <li class="toctree-l1"><a class="reference internal" href="configuration.html">Configuring gevent</a></li> </ul> <ul> <li class="toctree-l1 has-children"><a class="reference internal" href="api/index.html">API reference</a><input class="toctree-checkbox" id="toctree-checkbox-3" name="toctree-checkbox-3" role="switch" type="checkbox"/><label for="toctree-checkbox-3"><div class="visually-hidden">Toggle navigation of API reference</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul> <li class="toctree-l2"><a class="reference internal" href="api/gevent.html"><code class="xref py py-mod docutils literal notranslate"><span class="pre">gevent</span></code> – common functions</a></li> <li class="toctree-l2"><a class="reference internal" href="api/gevent.timeout.html">Cooperative Timeouts Using <code class="docutils literal notranslate"><span class="pre">gevent.Timeout</span></code></a></li> <li class="toctree-l2"><a class="reference internal" href="api/gevent.greenlet.html">Greenlet Objects</a></li> <li class="toctree-l2 has-children"><a class="reference internal" href="api/gevent.socket.html"><code class="xref py py-mod docutils literal notranslate"><span class="pre">gevent.socket</span></code> – Cooperative low-level networking interface</a><input class="toctree-checkbox" id="toctree-checkbox-4" name="toctree-checkbox-4" role="switch" type="checkbox"/><label for="toctree-checkbox-4"><div class="visually-hidden">Toggle navigation of gevent.socket – Cooperative low-level networking interface</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul> <li class="toctree-l3"><a class="reference internal" href="api/gevent._socket3.html">Python 3 interface</a></li> </ul> </li> <li class="toctree-l2"><a class="reference internal" href="api/gevent.ssl.html"><code class="xref py py-mod docutils literal notranslate"><span class="pre">gevent.ssl</span></code> – Secure Sockets Layer (SSL/TLS) module</a></li> <li class="toctree-l2"><a class="reference internal" href="api/gevent.select.html"><code class="xref py py-mod docutils literal notranslate"><span class="pre">gevent.select</span></code> – Waiting for I/O completion</a></li> <li class="toctree-l2"><a class="reference internal" href="api/gevent.selectors.html"><code class="xref py py-mod docutils literal notranslate"><span class="pre">gevent.selectors</span></code> – High-level IO Multiplexing</a></li> <li class="toctree-l2"><a class="reference internal" href="api/gevent.event.html"><code class="xref py py-mod docutils literal notranslate"><span class="pre">gevent.event</span></code> – Notifications of multiple listeners</a></li> <li class="toctree-l2"><a class="reference internal" href="api/gevent.queue.html"><code class="xref py py-mod docutils literal notranslate"><span class="pre">gevent.queue</span></code> – Synchronized queues</a></li> <li class="toctree-l2"><a class="reference internal" href="api/gevent.local.html"><code class="xref py py-mod docutils literal notranslate"><span class="pre">gevent.local</span></code> – Greenlet-local objects</a></li> <li class="toctree-l2"><a class="reference internal" href="api/gevent.lock.html"><code class="xref py py-mod docutils literal notranslate"><span class="pre">gevent.lock</span></code> – Locking primitives</a></li> <li class="toctree-l2"><a class="reference internal" href="api/gevent.hub.html"><code class="docutils literal notranslate"><span class="pre">gevent.hub</span></code> - The Event Loop and the Hub</a></li> <li class="toctree-l2"><a class="reference internal" href="api/gevent.core.html"><code class="xref py py-mod docutils literal notranslate"><span class="pre">gevent.core</span></code> - (deprecated) event loop abstraction</a></li> <li class="toctree-l2"><a class="reference internal" href="api/gevent.html"><code class="xref py py-mod docutils literal notranslate"><span class="pre">gevent</span></code> – common functions</a></li> <li class="toctree-l2"><a class="reference internal" href="api/gevent.backdoor.html"><code class="xref py py-mod docutils literal notranslate"><span class="pre">gevent.backdoor</span></code> – Interactive greenlet-based network console that can be used in any process</a></li> <li class="toctree-l2"><a class="reference internal" href="api/gevent.baseserver.html"><code class="xref py py-mod docutils literal notranslate"><span class="pre">gevent.baseserver</span></code> – Base class for implementing servers</a></li> <li class="toctree-l2"><a class="reference internal" href="api/gevent.builtins.html"><code class="xref py py-mod docutils literal notranslate"><span class="pre">gevent.builtins</span></code> – gevent friendly implementations of builtin functions</a></li> <li class="toctree-l2"><a class="reference internal" href="api/gevent.contextvars.html"><code class="xref py py-mod docutils literal notranslate"><span class="pre">gevent.contextvars</span></code> – Cooperative <code class="docutils literal notranslate"><span class="pre">contextvars</span></code></a></li> <li class="toctree-l2"><a class="reference internal" href="api/gevent.core.html"><code class="xref py py-mod docutils literal notranslate"><span class="pre">gevent.core</span></code> - (deprecated) event loop abstraction</a></li> <li class="toctree-l2"><a class="reference internal" href="api/gevent.event.html"><code class="xref py py-mod docutils literal notranslate"><span class="pre">gevent.event</span></code> – Notifications of multiple listeners</a></li> <li class="toctree-l2"><a class="reference internal" href="api/gevent.events.html"><code class="xref py py-mod docutils literal notranslate"><span class="pre">gevent.events</span></code> – Publish/subscribe event infrastructure</a></li> <li class="toctree-l2"><a class="reference internal" href="api/gevent.exceptions.html"><code class="xref py py-mod docutils literal notranslate"><span class="pre">gevent.exceptions</span></code> – Exceptions</a></li> <li class="toctree-l2"><a class="reference internal" href="api/gevent.fileobject.html"><code class="xref py py-mod docutils literal notranslate"><span class="pre">gevent.fileobject</span></code> – Wrappers to make file-like objects cooperative</a></li> <li class="toctree-l2"><a class="reference internal" href="api/gevent.hub.html"><code class="docutils literal notranslate"><span class="pre">gevent.hub</span></code> - The Event Loop and the Hub</a></li> <li class="toctree-l2"><a class="reference internal" href="api/gevent.local.html"><code class="xref py py-mod docutils literal notranslate"><span class="pre">gevent.local</span></code> – Greenlet-local objects</a></li> <li class="toctree-l2"><a class="reference internal" href="api/gevent.lock.html"><code class="xref py py-mod docutils literal notranslate"><span class="pre">gevent.lock</span></code> – Locking primitives</a></li> <li class="toctree-l2"><a class="reference internal" href="api/gevent.monkey.html"><code class="xref py py-mod docutils literal notranslate"><span class="pre">gevent.monkey</span></code> – Make the standard library cooperative</a></li> <li class="toctree-l2"><a class="reference internal" href="api/gevent.os.html"><code class="xref py py-mod docutils literal notranslate"><span class="pre">gevent.os</span></code> – Low-level operating system functions from <code class="xref py py-mod docutils literal notranslate"><span class="pre">os</span></code></a></li> <li class="toctree-l2"><a class="reference internal" href="api/gevent.pool.html"><code class="xref py py-mod docutils literal notranslate"><span class="pre">gevent.pool</span></code> – Managing greenlets in a group</a></li> <li class="toctree-l2"><a class="reference internal" href="api/gevent.pywsgi.html"><code class="xref py py-mod docutils literal notranslate"><span class="pre">gevent.pywsgi</span></code> – A pure-Python, gevent-friendly WSGI server</a></li> <li class="toctree-l2"><a class="reference internal" href="api/gevent.queue.html"><code class="xref py py-mod docutils literal notranslate"><span class="pre">gevent.queue</span></code> – Synchronized queues</a></li> <li class="toctree-l2"><a class="reference internal" href="api/gevent.resolver.ares.html"><code class="xref py py-mod docutils literal notranslate"><span class="pre">gevent.resolver.ares</span></code> – c-ares based hostname resolver</a></li> <li class="toctree-l2"><a class="reference internal" href="api/gevent.resolver.blocking.html"><code class="xref py py-mod docutils literal notranslate"><span class="pre">gevent.resolver.blocking</span></code> – Non-cooperative resolver</a></li> <li class="toctree-l2"><a class="reference internal" href="api/gevent.resolver.dnspython.html"><code class="xref py py-mod docutils literal notranslate"><span class="pre">gevent.resolver.dnspython</span></code> – Pure Python hostname resolver</a></li> <li class="toctree-l2"><a class="reference internal" href="api/gevent.resolver.thread.html"><code class="xref py py-mod docutils literal notranslate"><span class="pre">gevent.resolver.thread</span></code> – thread based hostname resolver</a></li> <li class="toctree-l2"><a class="reference internal" href="api/gevent.select.html"><code class="xref py py-mod docutils literal notranslate"><span class="pre">gevent.select</span></code> – Waiting for I/O completion</a></li> <li class="toctree-l2"><a class="reference internal" href="api/gevent.selectors.html"><code class="xref py py-mod docutils literal notranslate"><span class="pre">gevent.selectors</span></code> – High-level IO Multiplexing</a></li> <li class="toctree-l2"><a class="reference internal" href="api/gevent.server.html"><code class="xref py py-mod docutils literal notranslate"><span class="pre">gevent.server</span></code> – TCP/SSL server</a></li> <li class="toctree-l2"><a class="reference internal" href="api/gevent.signal.html"><code class="xref py py-mod docutils literal notranslate"><span class="pre">gevent.signal</span></code> – Cooperative implementation of special cases of <code class="xref py py-func docutils literal notranslate"><span class="pre">signal.signal()</span></code></a></li> <li class="toctree-l2 has-children"><a class="reference internal" href="api/gevent.socket.html"><code class="xref py py-mod docutils literal notranslate"><span class="pre">gevent.socket</span></code> – Cooperative low-level networking interface</a><input class="toctree-checkbox" id="toctree-checkbox-5" name="toctree-checkbox-5" role="switch" type="checkbox"/><label for="toctree-checkbox-5"><div class="visually-hidden">Toggle navigation of gevent.socket – Cooperative low-level networking interface</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul> <li class="toctree-l3"><a class="reference internal" href="api/gevent._socket3.html">Python 3 interface</a></li> </ul> </li> <li class="toctree-l2"><a class="reference internal" href="api/gevent.ssl.html"><code class="xref py py-mod docutils literal notranslate"><span class="pre">gevent.ssl</span></code> – Secure Sockets Layer (SSL/TLS) module</a></li> <li class="toctree-l2"><a class="reference internal" href="api/gevent.subprocess.html"><code class="xref py py-mod docutils literal notranslate"><span class="pre">gevent.subprocess</span></code> – Cooperative <code class="docutils literal notranslate"><span class="pre">subprocess</span></code> module</a></li> <li class="toctree-l2"><a class="reference internal" href="api/gevent.thread.html"><code class="xref py py-mod docutils literal notranslate"><span class="pre">gevent.thread</span></code> – Implementation of the standard <code class="xref py py-mod docutils literal notranslate"><span class="pre">thread</span></code> module that spawns greenlets</a></li> <li class="toctree-l2"><a class="reference internal" href="api/gevent.threading.html"><code class="xref py py-mod docutils literal notranslate"><span class="pre">gevent.threading</span></code> – Implementation of the standard <code class="xref py py-mod docutils literal notranslate"><span class="pre">threading</span></code> using greenlets</a></li> <li class="toctree-l2"><a class="reference internal" href="api/gevent.threadpool.html"><code class="xref py py-mod docutils literal notranslate"><span class="pre">gevent.threadpool</span></code> - A pool of native threads</a></li> <li class="toctree-l2"><a class="reference internal" href="api/gevent.time.html"><code class="xref py py-mod docutils literal notranslate"><span class="pre">gevent.time</span></code> – Makes <em>sleep</em> gevent aware</a></li> <li class="toctree-l2"><a class="reference internal" href="api/gevent.util.html"><code class="xref py py-mod docutils literal notranslate"><span class="pre">gevent.util</span></code> – Low-level utilities</a></li> <li class="toctree-l2"><a class="reference internal" href="api/gevent.ares.html"><code class="xref py py-mod docutils literal notranslate"><span class="pre">gevent.ares</span></code> – Backwards compatibility alias for <code class="xref py py-mod docutils literal notranslate"><span class="pre">gevent.resolver.cares</span></code></a></li> <li class="toctree-l2"><a class="reference internal" href="api/gevent.wsgi.html"><code class="docutils literal notranslate"><span class="pre">gevent.wsgi</span></code> – Historical note only; does not exist</a></li> <li class="toctree-l2 has-children"><a class="reference internal" href="examples/index.html">Examples</a><input class="toctree-checkbox" id="toctree-checkbox-6" name="toctree-checkbox-6" role="switch" type="checkbox"/><label for="toctree-checkbox-6"><div class="visually-hidden">Toggle navigation of Examples</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul> <li class="toctree-l3"><a class="reference internal" href="examples/concurrent_download.html">Example concurrent_download.py</a></li> <li class="toctree-l3"><a class="reference internal" href="examples/dns_mass_resolve.html">Example dns_mass_resolve.py</a></li> <li class="toctree-l3"><a class="reference internal" href="examples/echoserver.html">Example echoserver.py</a></li> <li class="toctree-l3"><a class="reference internal" href="examples/geventsendfile.html">Example geventsendfile.py</a></li> <li class="toctree-l3"><a class="reference internal" href="examples/portforwarder.html">Example portforwarder.py</a></li> <li class="toctree-l3"><a class="reference internal" href="examples/processes.html">Example processes.py</a></li> <li class="toctree-l3"><a class="reference internal" href="examples/psycopg2_pool.html">Example psycopg2_pool.py</a></li> <li class="toctree-l3"><a class="reference internal" href="examples/threadpool.html">Example threadpool.py</a></li> <li class="toctree-l3"><a class="reference internal" href="examples/udp_client.html">Example udp_client.py</a></li> <li class="toctree-l3"><a class="reference internal" href="examples/udp_server.html">Example udp_server.py</a></li> <li class="toctree-l3"><a class="reference internal" href="examples/unixsocket_client.html">Example unixsocket_client.py</a></li> <li class="toctree-l3"><a class="reference internal" href="examples/unixsocket_server.html">Example unixsocket_server.py</a></li> <li class="toctree-l3"><a class="reference internal" href="examples/webproxy.html">Example webproxy.py</a></li> <li class="toctree-l3"><a class="reference internal" href="examples/webpy.html">Example webpy.py</a></li> <li class="toctree-l3"><a class="reference internal" href="examples/wsgiserver.html">Example wsgiserver.py</a></li> <li class="toctree-l3"><a class="reference internal" href="examples/wsgiserver_ssl.html">Example wsgiserver_ssl.py</a></li> </ul> </li> </ul> </li> </ul> <ul> <li class="toctree-l1 has-children"><a class="reference internal" href="development/index.html">Development</a><input class="toctree-checkbox" id="toctree-checkbox-7" name="toctree-checkbox-7" role="switch" type="checkbox"/><label for="toctree-checkbox-7"><div class="visually-hidden">Toggle navigation of Development</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul> <li class="toctree-l2"><a class="reference internal" href="development/getting_started.html">Getting Started</a></li> <li class="toctree-l2"><a class="reference internal" href="development/installing_from_source.html">Installing From Source</a></li> <li class="toctree-l2"><a class="reference internal" href="development/running_tests.html">Running Tests</a></li> <li class="toctree-l2"><a class="reference internal" href="development/ci.html">Continuous integration</a></li> <li class="toctree-l2"><a class="reference internal" href="development/release_process.html">Release Process</a></li> </ul> </li> </ul> <ul> <li class="toctree-l1"><a class="reference internal" href="success.html">Success stories</a></li> <li class="toctree-l1"><a class="reference internal" href="community.html">Community</a></li> <li class="toctree-l1 has-children"><a class="reference internal" href="older_releases.html">Information About Older Releases</a><input class="toctree-checkbox" id="toctree-checkbox-8" name="toctree-checkbox-8" role="switch" type="checkbox"/><label for="toctree-checkbox-8"><div class="visually-hidden">Toggle navigation of Information About Older Releases</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul> <li class="toctree-l2 has-children"><a class="reference internal" href="whatsnew_1_5.html">What’s new in gevent 1.5</a><input class="toctree-checkbox" id="toctree-checkbox-9" name="toctree-checkbox-9" role="switch" type="checkbox"/><label for="toctree-checkbox-9"><div class="visually-hidden">Toggle navigation of What’s new in gevent 1.5</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul> <li class="toctree-l3"><a class="reference internal" href="changelog_1_5.html">Changes for 1.5</a></li> </ul> </li> <li class="toctree-l2 has-children"><a class="reference internal" href="whatsnew_1_4.html">What’s new in gevent 1.4</a><input class="toctree-checkbox" id="toctree-checkbox-10" name="toctree-checkbox-10" role="switch" type="checkbox"/><label for="toctree-checkbox-10"><div class="visually-hidden">Toggle navigation of What’s new in gevent 1.4</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul> <li class="toctree-l3"><a class="reference internal" href="changelog_1_4.html">Changes for 1.4</a></li> </ul> </li> <li class="toctree-l2 has-children"><a class="reference internal" href="whatsnew_1_3.html">What’s new in gevent 1.3</a><input class="toctree-checkbox" id="toctree-checkbox-11" name="toctree-checkbox-11" role="switch" type="checkbox"/><label for="toctree-checkbox-11"><div class="visually-hidden">Toggle navigation of What’s new in gevent 1.3</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul> <li class="toctree-l3"><a class="reference internal" href="changelog_1_3.html">Changes for 1.3</a></li> </ul> </li> <li class="toctree-l2 has-children"><a class="reference internal" href="whatsnew_1_2.html">What’s new in gevent 1.2</a><input class="toctree-checkbox" id="toctree-checkbox-12" name="toctree-checkbox-12" role="switch" type="checkbox"/><label for="toctree-checkbox-12"><div class="visually-hidden">Toggle navigation of What’s new in gevent 1.2</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul> <li class="toctree-l3"><a class="reference internal" href="changelog_1_2.html">Changes for 1.2</a></li> </ul> </li> <li class="toctree-l2 has-children"><a class="reference internal" href="whatsnew_1_1.html">What’s new in gevent 1.1</a><input class="toctree-checkbox" id="toctree-checkbox-13" name="toctree-checkbox-13" role="switch" type="checkbox"/><label for="toctree-checkbox-13"><div class="visually-hidden">Toggle navigation of What’s new in gevent 1.1</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul> <li class="toctree-l3"><a class="reference internal" href="changelog_1_1.html">Changes for 1.1</a></li> </ul> </li> <li class="toctree-l2 has-children"><a class="reference internal" href="whatsnew_1_0.html">What’s new in gevent 1.0</a><input class="toctree-checkbox" id="toctree-checkbox-14" name="toctree-checkbox-14" role="switch" type="checkbox"/><label for="toctree-checkbox-14"><div class="visually-hidden">Toggle navigation of What’s new in gevent 1.0</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul> <li class="toctree-l3"><a class="reference internal" href="changelog_1_0.html">Changes for 1.0</a></li> </ul> </li> <li class="toctree-l2"><a class="reference internal" href="changelog_1_5.html">Changes for 1.5</a></li> <li class="toctree-l2"><a class="reference internal" href="changelog_1_4.html">Changes for 1.4</a></li> <li class="toctree-l2"><a class="reference internal" href="changelog_1_3.html">Changes for 1.3</a></li> <li class="toctree-l2"><a class="reference internal" href="changelog_1_2.html">Changes for 1.2</a></li> <li class="toctree-l2"><a class="reference internal" href="changelog_1_1.html">Changes for 1.1</a></li> <li class="toctree-l2"><a class="reference internal" href="changelog_1_0.html">Changes for 1.0</a></li> <li class="toctree-l2"><a class="reference internal" href="changelog_pre.html">Changes before gevent 1.0</a></li> </ul> </li> </ul> </div> </div> </div> </div> </aside> <div class="main"> <div class="content"> <div class="article-container"> <a href="#" class="back-to-top muted-link"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"> <path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12z"></path> </svg> <span>Back to top</span> </a> <div class="content-icon-container"> <div class="theme-toggle-container theme-toggle-content"> <button class="theme-toggle"> <div class="visually-hidden">Toggle Light / Dark / Auto color theme</div> <svg class="theme-icon-when-auto-light"><use href="#svg-sun-with-moon"></use></svg> <svg class="theme-icon-when-auto-dark"><use href="#svg-moon-with-sun"></use></svg> <svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg> <svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg> </button> </div> <label class="toc-overlay-icon toc-content-icon" for="__toc"> <div class="visually-hidden">Toggle table of contents sidebar</div> <i class="icon"><svg><use href="#svg-toc"></use></svg></i> </label> </div> <article role="main" id="furo-main-content"> <section id="changelog"> <h1>Changelog<a class="headerlink" href="#changelog" title="Link to this heading">¶</a></h1> <section id="id1"> <h2>24.11.1 (2024-11-11)<a class="headerlink" href="#id1" title="Link to this heading">¶</a></h2> <section id="bugfixes"> <h3>Bugfixes<a class="headerlink" href="#bugfixes" title="Link to this heading">¶</a></h3> <ul> <li><p>Remove some legacy code that supported Python 2 for compatibility with the upcoming releases of Cython 3.1.</p> <p>Also, the <code class="docutils literal notranslate"><span class="pre">PeriodicMonitorThreadStartedEvent</span></code> now properly implements the <code class="docutils literal notranslate"><span class="pre">IPeriodicMonitorThreadStartedEvent</span></code> interface. The <code class="docutils literal notranslate"><span class="pre">EventLoopBlocked</span></code> event includes the hub which was blocked, and it is notified before the report is printed so that event listeners can modify the report. See <a class="extlink-issue reference external" href="https://github.com/gevent/gevent/issues/2076">issue #2076</a>.</p> </li> </ul> </section> </section> <section id="id2"> <h2>24.10.3 (2024-10-18)<a class="headerlink" href="#id2" title="Link to this heading">¶</a></h2> <section id="id3"> <h3>Bugfixes<a class="headerlink" href="#id3" title="Link to this heading">¶</a></h3> <ul class="simple"> <li><p>Fix clearing stack frames on Python 3.13. This is invoked when you fork after having used the thread pool. See <a class="extlink-issue reference external" href="https://github.com/gevent/gevent/issues/2067">issue #2067</a>.</p></li> <li><p>Distribute manylinux2014 wheels for x86_64. See <a class="extlink-issue reference external" href="https://github.com/gevent/gevent/issues/2068">issue #2068</a>.</p></li> <li><p>Stop switching to the hub in the after fork hook in a child process. This could lead to strange behaviour, and is different than what all other versions of Python do.</p></li> </ul> </section> </section> <section id="id4"> <h2>24.10.2 (2024-10-11)<a class="headerlink" href="#id4" title="Link to this heading">¶</a></h2> <section id="id5"> <h3>Bugfixes<a class="headerlink" href="#id5" title="Link to this heading">¶</a></h3> <ul class="simple"> <li><p>Workaround a Cython bug compiling on GCC14. See <a class="extlink-issue reference external" href="https://github.com/gevent/gevent/issues/2049">issue #2049</a>.</p></li> </ul> </section> </section> <section id="id6"> <h2>24.10.1 (2024-10-09)<a class="headerlink" href="#id6" title="Link to this heading">¶</a></h2> <section id="features"> <h3>Features<a class="headerlink" href="#features" title="Link to this heading">¶</a></h3> <ul> <li><p>Update the bundled c-ares to 1.33.1.</p></li> <li><p>Add support for Python 3.13.</p> <ul class="simple"> <li><p>The functions and classes in <code class="docutils literal notranslate"><span class="pre">gevent.subprocess</span></code> no longer accept <code class="docutils literal notranslate"><span class="pre">stdout=STDOUT</span></code> and raise a <code class="docutils literal notranslate"><span class="pre">ValueError</span></code>.</p></li> </ul> <p>Several additions and changes to the <code class="docutils literal notranslate"><span class="pre">queue</span></code> module, including:</p> <ul class="simple"> <li><p><code class="docutils literal notranslate"><span class="pre">Queue.shutdown</span></code> is available on all versions of Python.</p></li> <li><p><code class="docutils literal notranslate"><span class="pre">LifoQueue</span></code> is now a joinable queue.</p></li> </ul> </li> <li><p>gevent.monkey changed from a module to a package. The public API remains the same.</p> <p>For this release, private APIs (undocumented, marked internal, or beginning with an underscore) are also preserved. However, these may be changed or removed at any time in the future. If you are using one of these APIs and cannot replace it, please contact the gevent team.</p> </li> </ul> </section> <section id="id7"> <h3>Bugfixes<a class="headerlink" href="#id7" title="Link to this heading">¶</a></h3> <ul class="simple"> <li><p>For platforms that don’t have <code class="docutils literal notranslate"><span class="pre">socketpair</span></code>, upgrade our fallback code to avoid a security issue. See <a class="extlink-issue reference external" href="https://github.com/gevent/gevent/issues/2048">issue #2048</a>.</p></li> </ul> </section> <section id="deprecations-and-removals"> <h3>Deprecations and Removals<a class="headerlink" href="#deprecations-and-removals" title="Link to this heading">¶</a></h3> <ul class="simple"> <li><p>Remove support for Python 3.8, which has reached the end of its support lifecycle. See <a class="extlink-issue reference external" href="https://github.com/gevent/gevent/issues/remove_py38">issue #remove_py38</a>.</p></li> </ul> </section> </section> <section id="id8"> <h2>24.2.1 (2024-02-14)<a class="headerlink" href="#id8" title="Link to this heading">¶</a></h2> <section id="id9"> <h3>Bugfixes<a class="headerlink" href="#id9" title="Link to this heading">¶</a></h3> <ul> <li><p>Add support for Python patch releases 3.11.8 and 3.12.2, which changed internal details of threading.</p> <p>As a result of these changes, note that it is no longer possible to change the <code class="docutils literal notranslate"><span class="pre">__class__</span></code> of a <code class="docutils literal notranslate"><span class="pre">gevent.threading._DummyThread</span></code> object on those versions.</p> <p>See <a class="extlink-issue reference external" href="https://github.com/gevent/gevent/issues/2020">issue #2020</a>.</p> </li> </ul> </section> <section id="other"> <h3>Other<a class="headerlink" href="#other" title="Link to this heading">¶</a></h3> <p>Other updates for compatibility with the standard library include:</p> <blockquote> <div><ul class="simple"> <li><p>Errors raised from <code class="docutils literal notranslate"><span class="pre">subprocess.Popen</span></code> may not have a filename set.</p></li> <li><p><code class="docutils literal notranslate"><span class="pre">SSLSocket.recv_into</span></code> and <code class="docutils literal notranslate"><span class="pre">SSLSocket.read</span></code> no longer require the buffer to implement <code class="docutils literal notranslate"><span class="pre">len</span></code> and now work with buffers whose size is not 1.</p></li> <li><p>gh-108310: Fix CVE-2023-40217: Check for & avoid the ssl pre-close flaw.</p></li> </ul> </div></blockquote> <p>In addition:</p> <blockquote> <div><ul class="simple"> <li><p>Drop <code class="docutils literal notranslate"><span class="pre">setuptools</span></code> to a soft test dependency.</p></li> <li><p>Drop support for very old versions of CFFI.</p></li> <li><p>Update bundled c-ares from 1.19.1 to 1.26.0.</p></li> <li><p>Locks created by gevent, but acquired from multiple different threads (not recommended), no longer spin to implement timeouts and interruptible blocking. Instead, they use the native functionality of the Python 3 lock. This may improve some scenarios. See <a class="extlink-issue reference external" href="https://github.com/gevent/gevent/issues/2013">issue #2013</a>.</p></li> </ul> </div></blockquote> </section> </section> <section id="id10"> <h2>23.9.1 (2023-09-12)<a class="headerlink" href="#id10" title="Link to this heading">¶</a></h2> <section id="id11"> <h3>Bugfixes<a class="headerlink" href="#id11" title="Link to this heading">¶</a></h3> <ul class="simple"> <li><p>Require greenlet 3.0 on Python 3.11 and Python 3.12; greenlet 3.0 is recommended for all platforms. This fixes a number of obscure crashes on all versions of Python, as well as fixing a fairly common problem on Python 3.11+ that could manifest as either a crash or as a <code class="docutils literal notranslate"><span class="pre">SystemError</span></code>. See <a class="extlink-issue reference external" href="https://github.com/gevent/gevent/issues/1985">issue #1985</a>.</p></li> </ul> </section> </section> <hr class="docutils" /> <section id="post1-2023-09-02"> <h2>23.9.0.post1 (2023-09-02)<a class="headerlink" href="#post1-2023-09-02" title="Link to this heading">¶</a></h2> <ul class="simple"> <li><p>Fix Windows wheel builds.</p></li> <li><p>Fix macOS wheel builds.</p></li> </ul> </section> <section id="id12"> <h2>23.9.0 (2023-09-01)<a class="headerlink" href="#id12" title="Link to this heading">¶</a></h2> <section id="id13"> <h3>Bugfixes<a class="headerlink" href="#id13" title="Link to this heading">¶</a></h3> <ul> <li><p>Make <code class="docutils literal notranslate"><span class="pre">gevent.select.select</span></code> accept arbitrary iterables, not just sequences. That is, you can now pass in a generator of file descriptors instead of a realized list. Internally, arbitrary iterables are copied into lists. This better matches what the standard library does. Thanks to David Salvisberg. See <a class="extlink-issue reference external" href="https://github.com/gevent/gevent/issues/1979">issue #1979</a>.</p></li> <li><p>On Python 3.11 and newer, opt out of Cython’s fast exception manipulation, which <em>may</em> be causing problems in certain circumstances when combined with greenlets.</p> <p>On all versions of Python, adjust some error handling in the default C-based loop. This fixes several assertion failures on debug versions of CPython. Hopefully it has a positive impact under real conditions. See <a class="extlink-issue reference external" href="https://github.com/gevent/gevent/issues/1985">issue #1985</a>.</p> </li> <li><p>Make <code class="docutils literal notranslate"><span class="pre">gevent.pywsgi</span></code> comply more closely with the HTTP specification for chunked transfer encoding. In particular, we are much stricter about trailers, and trailers that are invalid (too long or featuring disallowed characters) forcibly close the connection to the client <em>after</em> the results have been sent.</p> <p>Trailers otherwise continue to be ignored and are not available to the WSGI application.</p> <p>Previously, carefully crafted invalid trailers in chunked requests on keep-alive connections might appear as two requests to <code class="docutils literal notranslate"><span class="pre">gevent.pywsgi</span></code>. Because this was handled exactly as a normal keep-alive connection with two requests, the WSGI application should handle it normally. However, if you were counting on some upstream server to filter incoming requests based on paths or header fields, and the upstream server simply passed trailers through without validating them, then this embedded second request would bypass those checks. (If the upstream server validated that the trailers meet the HTTP specification, this could not occur, because characters that are required in an HTTP request, like a space, are not allowed in trailers.) CVE-2023-41419 was reserved for this.</p> <p>Our thanks to the original reporters, Keran Mu (<a class="reference external" href="mailto:mkr22%40mails.tsinghua.edu.cn">mkr22<span>@</span>mails<span>.</span>tsinghua<span>.</span>edu<span>.</span>cn</a>) and Jianjun Chen (<a class="reference external" href="mailto:jianjun%40tsinghua.edu.cn">jianjun<span>@</span>tsinghua<span>.</span>edu<span>.</span>cn</a>), from Tsinghua University and Zhongguancun Laboratory. See <a class="extlink-issue reference external" href="https://github.com/gevent/gevent/issues/1989">issue #1989</a>.</p> </li> </ul> </section> </section> <hr class="docutils" /> <section id="id14"> <h2>23.7.0 (2023-07-11)<a class="headerlink" href="#id14" title="Link to this heading">¶</a></h2> <section id="id15"> <h3>Features<a class="headerlink" href="#id15" title="Link to this heading">¶</a></h3> <ul class="simple"> <li><p>Add preliminary support for Python 3.12, using greenlet 3.0a1. This is somewhat tricky to build from source at this time, and there is one known issue: On Python 3.12b3, dumping tracebacks of greenlets is not available. <a class="extlink-issue reference external" href="https://github.com/gevent/gevent/issues/1969">issue #1969</a>.</p></li> <li><p>Update the bundled c-ares version to 1.19.1. See <a class="extlink-issue reference external" href="https://github.com/gevent/gevent/issues/1947">issue #1947</a>.</p></li> </ul> </section> <section id="id16"> <h3>Bugfixes<a class="headerlink" href="#id16" title="Link to this heading">¶</a></h3> <ul> <li><p>Fix an edge case connecting a non-blocking <code class="docutils literal notranslate"><span class="pre">SSLSocket</span></code> that could result in an AttributeError. In a change to match the standard library, calling <code class="docutils literal notranslate"><span class="pre">sock.connect_ex()</span></code> on a subclass of <code class="docutils literal notranslate"><span class="pre">socket</span></code> no longer calls the subclass’s <code class="docutils literal notranslate"><span class="pre">connect</span></code> method.</p> <p>Initial fix by Priyankar Jain. See <a class="extlink-issue reference external" href="https://github.com/gevent/gevent/issues/1932">issue #1932</a>.</p> </li> <li><p>Make gevent’s <code class="docutils literal notranslate"><span class="pre">FileObjectThread</span></code> (mostly used on Windows) implement <code class="docutils literal notranslate"><span class="pre">readinto</span></code> cooperatively. PR by Kirill Smelkov. See <a class="extlink-issue reference external" href="https://github.com/gevent/gevent/issues/1948">issue #1948</a>.</p></li> <li><p>Work around an <code class="docutils literal notranslate"><span class="pre">AttributeError</span></code> during cyclic garbage collection when Python finalizers (<code class="docutils literal notranslate"><span class="pre">__del__</span></code> and the like) attempt to use gevent APIs. This is not a recommended practice, and it is unclear if catching this <code class="docutils literal notranslate"><span class="pre">AttributeError</span></code> will fix any problems or just shift them. (If we could determine the root situation that results in this cycle, we might be able to solve it.) See <a class="extlink-issue reference external" href="https://github.com/gevent/gevent/issues/1961">issue #1961</a>.</p></li> </ul> </section> <section id="id17"> <h3>Deprecations and Removals<a class="headerlink" href="#id17" title="Link to this heading">¶</a></h3> <ul> <li><p>Remove support for obsolete Python versions. This is everything prior to 3.8.</p> <p>Related changes include:</p> <ul class="simple"> <li><p>Stop using <code class="docutils literal notranslate"><span class="pre">pkg_resources</span></code> to find entry points (plugins). Instead, use <code class="docutils literal notranslate"><span class="pre">importlib.metadata</span></code>.</p></li> <li><p>Honor <code class="docutils literal notranslate"><span class="pre">sys.unraisablehook</span></code> when a callback function produces an exception, and handling the exception in the hub <em>also</em> produces an exception. In older versions, these would be simply printed.</p></li> <li><p><code class="docutils literal notranslate"><span class="pre">setup.py</span></code> no longer includes the <code class="docutils literal notranslate"><span class="pre">setup_requires</span></code> keyword. Installation with a tool that understands <code class="docutils literal notranslate"><span class="pre">pyproject.toml</span></code> is recommended.</p></li> <li><p>The bundled tblib has been updated to version 2.0.</p></li> </ul> </li> </ul> </section> </section> <hr class="docutils" /> <section id="id18"> <h2>22.10.2 (2022-10-31)<a class="headerlink" href="#id18" title="Link to this heading">¶</a></h2> <section id="id19"> <h3>Bugfixes<a class="headerlink" href="#id19" title="Link to this heading">¶</a></h3> <ul> <li><p>Update to greenlet 2.0. This fixes a deallocation issue that required a change in greenlet’s ABI. The design of greenlet 2.0 is intended to prevent future fixes and enhancements from requiring an ABI change, making it easier to update gevent and greenlet independently.</p> <div class="admonition caution"> <p class="admonition-title">Caution</p> <p>greenlet 2.0 requires a modern-ish C++ compiler. This may mean certain older platforms are no longer supported. See <a class="extlink-issue reference external" href="https://github.com/gevent/gevent/issues/1909">issue #1909</a>.</p> </div> </li> </ul> </section> </section> <hr class="docutils" /> <section id="id20"> <h2>22.10.1 (2022-10-14)<a class="headerlink" href="#id20" title="Link to this heading">¶</a></h2> <section id="id21"> <h3>Features<a class="headerlink" href="#id21" title="Link to this heading">¶</a></h3> <ul class="simple"> <li><p>Update bundled libuv to 1.44.2. See <a class="extlink-issue reference external" href="https://github.com/gevent/gevent/issues/1913">issue #1913</a>.</p></li> </ul> </section> <section id="misc"> <h3>Misc<a class="headerlink" href="#misc" title="Link to this heading">¶</a></h3> <ul class="simple"> <li><p>See <a class="extlink-issue reference external" href="https://github.com/gevent/gevent/issues/1898">issue #1898</a>., See <a class="extlink-issue reference external" href="https://github.com/gevent/gevent/issues/1910">issue #1910</a>., See <a class="extlink-issue reference external" href="https://github.com/gevent/gevent/issues/1915">issue #1915</a>.</p></li> </ul> </section> </section> <hr class="docutils" /> <section id="id22"> <h2>22.08.0 (2022-10-08)<a class="headerlink" href="#id22" title="Link to this heading">¶</a></h2> <section id="id23"> <h3>Features<a class="headerlink" href="#id23" title="Link to this heading">¶</a></h3> <ul> <li><p>Windows: Test and provide binary wheels for PyPy3.7.</p> <p>Note that there may be issues with subprocesses, signals, and it may be slow. See <a class="extlink-issue reference external" href="https://github.com/gevent/gevent/issues/1798">issue #1798</a>.</p> </li> <li><p>Upgrade embedded c-ares to 1.18.1. See <a class="extlink-issue reference external" href="https://github.com/gevent/gevent/issues/1847">issue #1847</a>.</p></li> <li><p>Upgrade bundled libuv to 1.42.0 from 1.40.0. See <a class="extlink-issue reference external" href="https://github.com/gevent/gevent/issues/1851">issue #1851</a>.</p></li> <li><p>Added preliminary support for Python 3.11 (rc2 and later).</p> <p>Some platforms may or may not have binary wheels at this time.</p> <div class="admonition important"> <p class="admonition-title">Important</p> <p>Support for legacy versions of Python, including 2.7 and 3.6, will be ending soon. The maintenance burden has become too great and the maintainer’s time is too limited.</p> <p>Ideally, there will be a release of gevent compatible with a final release of greenlet 2.0 that still supports those legacy versions, but that may not be possible; this may be the final release to support them.</p> </div> <p><a class="reference internal" href="api/gevent.threadpool.html#gevent.threadpool.ThreadPool" title="gevent.threadpool.ThreadPool"><code class="xref py py-class docutils literal notranslate"><span class="pre">gevent.threadpool.ThreadPool</span></code></a> can now optionally expire idle threads. This is used by default in the implicit thread pool used for DNS requests and other user-submitted tasks; other uses of a thread-pool need to opt-in to this. See <a class="extlink-issue reference external" href="https://github.com/gevent/gevent/issues/1867">issue #1867</a>.</p> </li> </ul> </section> <section id="id24"> <h3>Bugfixes<a class="headerlink" href="#id24" title="Link to this heading">¶</a></h3> <ul class="simple"> <li><p>Truly disable the effects of compiling with <code class="docutils literal notranslate"><span class="pre">-ffast-math</span></code>. See <a class="extlink-issue reference external" href="https://github.com/gevent/gevent/issues/1864">issue #1864</a>.</p></li> </ul> </section> </section> <hr class="docutils" /> <section id="id25"> <h2>21.12.0 (2021-12-11)<a class="headerlink" href="#id25" title="Link to this heading">¶</a></h2> <section id="id26"> <h3>Features<a class="headerlink" href="#id26" title="Link to this heading">¶</a></h3> <ul> <li><p>Update autoconf files for Apple Silicon Macs. Note that while there are reports of compiling gevent on Apple Silicon Macs now, this is <em>not</em> a tested configuration. There may be some remaining issues with CFFI on some systems as well. See <a class="extlink-issue reference external" href="https://github.com/gevent/gevent/issues/1721">issue #1721</a>.</p></li> <li><p>Build and upload CPython 3.10 binary manylinux wheels.</p> <p>Unfortunately, this required us to stop building and uploading CPython 2.7 binary manylinux wheels. Binary wheels for 2.7 continue to be available for Windows and macOS. See <a class="extlink-issue reference external" href="https://github.com/gevent/gevent/issues/1822">issue #1822</a>.</p> </li> <li><p>Test and distribute musllinux_1_1 wheels. See <a class="extlink-issue reference external" href="https://github.com/gevent/gevent/issues/1837">issue #1837</a>.</p></li> <li><p>Update the tested versions of PyPy2 and PyPy3. For PyPy2, there should be no user visible changes, but for PyPy3, support has moved from Python 3.6 to Python 3.7. See <a class="extlink-issue reference external" href="https://github.com/gevent/gevent/issues/1843">issue #1843</a>.</p></li> </ul> </section> <section id="id27"> <h3>Bugfixes<a class="headerlink" href="#id27" title="Link to this heading">¶</a></h3> <ul class="simple"> <li><p>Try to avoid linking to two different Python runtime DLLs on Windows. See <a class="extlink-issue reference external" href="https://github.com/gevent/gevent/issues/1814">issue #1814</a>.</p></li> <li><p>Stop compiling manylinux wheels with <code class="docutils literal notranslate"><span class="pre">-ffast-math.</span></code> This was implicit in <code class="docutils literal notranslate"><span class="pre">-Ofast</span></code>, but could alter the global state of the process. Analysis and fix thanks to Ilya Konstantinov. See <a class="extlink-issue reference external" href="https://github.com/gevent/gevent/issues/1820">issue #1820</a>.</p></li> <li><p>Fix hanging the interpreter on shutdown if gevent monkey patching occurred on a non-main thread in Python 3.9.8 and above. (Note that this is not a recommended practice.) See <a class="extlink-issue reference external" href="https://github.com/gevent/gevent/issues/1839">issue #1839</a>.</p></li> </ul> </section> </section> <hr class="docutils" /> <section id="id28"> <h2>21.8.0 (2021-08-05)<a class="headerlink" href="#id28" title="Link to this heading">¶</a></h2> <section id="id29"> <h3>Features<a class="headerlink" href="#id29" title="Link to this heading">¶</a></h3> <ul> <li><p>Update the embedded c-ares from 1.16.1 to 1.17.1. See <a class="extlink-issue reference external" href="https://github.com/gevent/gevent/issues/1758">issue #1758</a>.</p></li> <li><p>Add support for Python 3.10rc1 and newer.</p> <p>As part of this, the minimum required greenlet version was increased to 1.1.0 (on CPython), and the minimum version of Cython needed to build gevent from a source checkout is 3.0a9.</p> <p>Note that the dnspython resolver is not available on Python 3.10. See <a class="extlink-issue reference external" href="https://github.com/gevent/gevent/issues/1790">issue #1790</a>.</p> </li> <li><p>Update from Cython 3.0a6 to 3.0a9. See <a class="extlink-issue reference external" href="https://github.com/gevent/gevent/issues/1801">issue #1801</a>.</p></li> </ul> </section> <section id="id30"> <h3>Misc<a class="headerlink" href="#id30" title="Link to this heading">¶</a></h3> <ul class="simple"> <li><p>See <a class="extlink-issue reference external" href="https://github.com/gevent/gevent/issues/1789">issue #1789</a>.</p></li> </ul> </section> </section> <hr class="docutils" /> <section id="id31"> <h2>21.1.2 (2021-01-20)<a class="headerlink" href="#id31" title="Link to this heading">¶</a></h2> <section id="id32"> <h3>Features<a class="headerlink" href="#id32" title="Link to this heading">¶</a></h3> <ul class="simple"> <li><p>Update the embedded libev from 4.31 to 4.33. See <a class="extlink-issue reference external" href="https://github.com/gevent/gevent/issues/1754">issue #1754</a>.</p></li> <li><p>Update the embedded libuv from 1.38.0 to 1.40.0. See <a class="extlink-issue reference external" href="https://github.com/gevent/gevent/issues/1755">issue #1755</a>.</p></li> </ul> </section> <section id="id33"> <h3>Misc<a class="headerlink" href="#id33" title="Link to this heading">¶</a></h3> <ul class="simple"> <li><p>See <a class="extlink-issue reference external" href="https://github.com/gevent/gevent/issues/1753">issue #1753</a>.</p></li> </ul> </section> </section> <hr class="docutils" /> <section id="id34"> <h2>21.1.1 (2021-01-18)<a class="headerlink" href="#id34" title="Link to this heading">¶</a></h2> <section id="id35"> <h3>Bugfixes<a class="headerlink" href="#id35" title="Link to this heading">¶</a></h3> <p>Fix a <code class="docutils literal notranslate"><span class="pre">TypeError</span></code> on startup on Python 2 with <code class="docutils literal notranslate"><span class="pre">zope.schema</span></code> installed. Reported by Josh Zuech.</p> </section> </section> <section id="id36"> <h2>21.1.0 (2021-01-15)<a class="headerlink" href="#id36" title="Link to this heading">¶</a></h2> <section id="id37"> <h3>Bugfixes<a class="headerlink" href="#id37" title="Link to this heading">¶</a></h3> <ul> <li><p>Make gevent <code class="docutils literal notranslate"><span class="pre">FileObjects</span></code> more closely match the semantics of native file objects for the <code class="docutils literal notranslate"><span class="pre">name</span></code> attribute:</p> <ul class="simple"> <li><p>Objects opened from a file descriptor integer have that integer as their <code class="docutils literal notranslate"><span class="pre">name.</span></code> (Note that this is the Python 3 semantics; Python 2 native file objects returned from <code class="docutils literal notranslate"><span class="pre">os.fdopen()</span></code> have the string “<fdopen>” as their name , but here gevent always follows Python 3.)</p></li> <li><p>The <code class="docutils literal notranslate"><span class="pre">name</span></code> remains accessible after the file object is closed.</p></li> </ul> <p>Thanks to Dan Milon. See <a class="extlink-issue reference external" href="https://github.com/gevent/gevent/issues/1745">issue #1745</a>.</p> </li> </ul> </section> <section id="id38"> <h3>Misc<a class="headerlink" href="#id38" title="Link to this heading">¶</a></h3> <p>Make <code class="docutils literal notranslate"><span class="pre">gevent.event.AsyncResult</span></code> print a warning when it detects improper cross-thread usage instead of hanging.</p> <p><code class="docutils literal notranslate"><span class="pre">AsyncResult</span></code> has <em>never</em> been safe to use from multiple threads. It, like most gevent objects, is intended to work with greenlets from a single thread. Using <code class="docutils literal notranslate"><span class="pre">AsyncResult</span></code> from multiple threads has undefined semantics. The safest way to communicate between threads is using an event loop async watcher.</p> <p>Those undefined semantics changed in recent gevent versions, making it more likely that an abused <code class="docutils literal notranslate"><span class="pre">AsyncResult</span></code> would misbehave in ways that could cause the program to hang.</p> <p>Now, when <code class="docutils literal notranslate"><span class="pre">AsyncResult</span></code> detects a situation that would hang, it prints a warning to stderr. Note that this is best-effort, and hangs are still possible, especially under PyPy 7.3.3.</p> <p>At the same time, <code class="docutils literal notranslate"><span class="pre">AsyncResult</span></code> is tuned to behave more like it did in older versions, meaning that the hang is once again much less likely. If you were getting lucky and using <code class="docutils literal notranslate"><span class="pre">AsyncResult</span></code> successfully across threads, this may restore your luck. In addition, cross-thread wakeups are faster. Note that the gevent hub now uses an extra file descriptor to implement this.</p> <p>Similar changes apply to <code class="docutils literal notranslate"><span class="pre">gevent.event.Event</span></code> (see <a class="extlink-issue reference external" href="https://github.com/gevent/gevent/issues/1735">issue #1735</a>).</p> <p>See <a class="extlink-issue reference external" href="https://github.com/gevent/gevent/issues/1739">issue #1739</a>.</p> </section> </section> <hr class="docutils" /> <section id="id39"> <h2>20.12.1 (2020-12-27)<a class="headerlink" href="#id39" title="Link to this heading">¶</a></h2> <section id="id40"> <h3>Features<a class="headerlink" href="#id40" title="Link to this heading">¶</a></h3> <ul> <li><p>Make <a class="reference internal" href="api/gevent.greenlet.html#gevent.Greenlet" title="gevent.Greenlet"><code class="xref py py-class docutils literal notranslate"><span class="pre">gevent.Greenlet</span></code></a> objects function as context managers. When the <code class="docutils literal notranslate"><span class="pre">with</span></code> suite finishes, execution doesn’t continue until the greenlet is finished. This can be a simpler alternative to a <a class="reference internal" href="api/gevent.pool.html#gevent.pool.Group" title="gevent.pool.Group"><code class="xref py py-class docutils literal notranslate"><span class="pre">gevent.pool.Group</span></code></a> when the lifetime of greenlets can be lexically scoped.</p> <p>Suggested by André Caron. See <a class="extlink-issue reference external" href="https://github.com/gevent/gevent/issues/1324">issue #1324</a>.</p> </li> </ul> </section> <section id="id41"> <h3>Bugfixes<a class="headerlink" href="#id41" title="Link to this heading">¶</a></h3> <ul> <li><p>Make gevent’s <code class="docutils literal notranslate"><span class="pre">Semaphore</span></code> objects properly handle native thread identifiers larger than can be stored in a C <code class="docutils literal notranslate"><span class="pre">long</span></code> on Python 3, instead of raising an <code class="docutils literal notranslate"><span class="pre">OverflowError</span></code>.</p> <p>Reported by TheYOSH. See <a class="extlink-issue reference external" href="https://github.com/gevent/gevent/issues/1733">issue #1733</a>.</p> </li> </ul> </section> </section> <hr class="docutils" /> <section id="id42"> <h2>20.12.0 (2020-12-22)<a class="headerlink" href="#id42" title="Link to this heading">¶</a></h2> <section id="id43"> <h3>Features<a class="headerlink" href="#id43" title="Link to this heading">¶</a></h3> <ul> <li><p>Make worker threads created by <a class="reference internal" href="api/gevent.threadpool.html#gevent.threadpool.ThreadPool" title="gevent.threadpool.ThreadPool"><code class="xref py py-class docutils literal notranslate"><span class="pre">gevent.threadpool.ThreadPool</span></code></a> install the <a class="reference external" href="https://docs.python.org/3/library/threading.html#threading.setprofile" title="(in Python v3.13)"><code class="xref py py-func docutils literal notranslate"><span class="pre">threading.setprofile()</span></code></a> and <a class="reference external" href="https://docs.python.org/3/library/threading.html#threading.settrace" title="(in Python v3.13)"><code class="xref py py-func docutils literal notranslate"><span class="pre">threading.settrace()</span></code></a> hooks while tasks are running. This provides visibility to profiling and tracing tools like yappi.</p> <p>Reported by Suhail Muhammed. See <a class="extlink-issue reference external" href="https://github.com/gevent/gevent/issues/1678">issue #1678</a>.</p> </li> <li><p>Drop support for Python 3.5.</p></li> </ul> </section> <section id="id44"> <h3>Bugfixes<a class="headerlink" href="#id44" title="Link to this heading">¶</a></h3> <ul> <li><p>Incorrectly passing an exception <em>instance</em> instead of an exception <em>type</em> to <a class="reference internal" href="api/gevent.greenlet.html#gevent.Greenlet.kill" title="gevent.Greenlet.kill"><code class="xref py py-obj docutils literal notranslate"><span class="pre">gevent.Greenlet.kill</span></code></a> or <a class="reference internal" href="api/gevent.html#gevent.killall" title="gevent.killall"><code class="xref py py-obj docutils literal notranslate"><span class="pre">gevent.killall</span></code></a> no longer prints an exception to stderr. See <a class="extlink-issue reference external" href="https://github.com/gevent/gevent/issues/1663">issue #1663</a>.</p></li> <li><p>Make destroying a hub try harder to more forcibly stop loop processing when there are outstanding callbacks or IO operations scheduled.</p> <p>Thanks to Josh Snyder (<a class="extlink-issue reference external" href="https://github.com/gevent/gevent/issues/1686">issue #1686</a>) and Jan-Philip Gehrcke (<a class="extlink-issue reference external" href="https://github.com/gevent/gevent/issues/1669">issue #1669</a>). See <a class="extlink-issue reference external" href="https://github.com/gevent/gevent/issues/1686">issue #1686</a>.</p> </li> <li><p>Improve the ability to use monkey-patched locks, and <a class="reference internal" href="api/gevent.lock.html#gevent.lock.BoundedSemaphore" title="gevent.lock.BoundedSemaphore"><code class="xref py py-obj docutils literal notranslate"><span class="pre">gevent.lock.BoundedSemaphore</span></code></a>, across threads, especially when the various threads might not have a gevent hub or any other active greenlets. In particular, this handles some cases that previously raised <code class="docutils literal notranslate"><span class="pre">LoopExit</span></code> or would hang. Note that this may not be reliable on PyPy on Windows; such an environment is not currently recommended.</p> <p>The semaphore tries to avoid creating a hub if it seems unnecessary, automatically creating one in the single-threaded case when it would block, but not in the multi-threaded case. While the differences should be correctly detected, it’s possible there are corner cases where they might not be.</p> <p>If your application appears to hang acquiring semaphores, but adding a call to <code class="docutils literal notranslate"><span class="pre">gevent.get_hub()</span></code> in the thread attempting to acquire the semaphore before doing so fixes it, please file an issue. See <a class="extlink-issue reference external" href="https://github.com/gevent/gevent/issues/1698">issue #1698</a>.</p> </li> <li><p>Make error reporting when a greenlet suffers a <a class="reference external" href="https://docs.python.org/3/library/exceptions.html#RecursionError" title="(in Python v3.13)"><code class="xref py py-obj docutils literal notranslate"><span class="pre">RecursionError</span></code></a> more reliable.</p> <p>Reported by Dan Milon. See <a class="extlink-issue reference external" href="https://github.com/gevent/gevent/issues/1704">issue #1704</a>.</p> </li> <li><p>gevent.pywsgi: Avoid printing an extra traceback (“TypeError: not enough arguments for format string”) to standard error on certain invalid client requests.</p> <p>Reported by Steven Grimm. See <a class="extlink-issue reference external" href="https://github.com/gevent/gevent/issues/1708">issue #1708</a>.</p> </li> <li><p>Add support for PyPy2 7.3.3. See <a class="extlink-issue reference external" href="https://github.com/gevent/gevent/issues/1709">issue #1709</a>.</p></li> <li><p>Python 2: Make <code class="docutils literal notranslate"><span class="pre">gevent.subprocess.Popen.stdin</span></code> objects have a <code class="docutils literal notranslate"><span class="pre">write</span></code> method that guarantees to write the entire argument in binary, unbuffered mode. This may require multiple trips around the event loop, but more closely matches the behaviour of the Python 2 standard library (and gevent prior to 1.5). The number of bytes written is still returned (instead of <code class="docutils literal notranslate"><span class="pre">None</span></code>). See <a class="extlink-issue reference external" href="https://github.com/gevent/gevent/issues/1711">issue #1711</a>.</p></li> <li><p>Make <a class="reference internal" href="api/gevent.pywsgi.html#module-gevent.pywsgi" title="gevent.pywsgi"><code class="xref py py-obj docutils literal notranslate"><span class="pre">gevent.pywsgi</span></code></a> stop trying to enforce the rules for reading chunked input or <code class="docutils literal notranslate"><span class="pre">Content-Length</span></code> terminated input when the connection is being upgraded, for example to a websocket connection. Likewise, if the protocol was switched by returning a <code class="docutils literal notranslate"><span class="pre">101</span></code> status, stop trying to automatically chunk the responses.</p> <p>Reported by Kavindu Santhusa. See <a class="extlink-issue reference external" href="https://github.com/gevent/gevent/issues/1712">issue #1712</a>.</p> </li> <li><p>Remove the <code class="docutils literal notranslate"><span class="pre">__dict__</span></code> attribute from <a class="reference internal" href="api/gevent.socket.html#gevent.socket.socket" title="gevent.socket.socket"><code class="xref py py-obj docutils literal notranslate"><span class="pre">gevent.socket.socket</span></code></a> objects. The standard library socket do not have a <code class="docutils literal notranslate"><span class="pre">__dict__</span></code>.</p> <p>Noticed by Carson Ip.</p> <p>As part of this refactoring, share more common socket code between Python 2 and Python 3. See <a class="extlink-issue reference external" href="https://github.com/gevent/gevent/issues/1724">issue #1724</a>.</p> </li> </ul> </section> </section> <hr class="docutils" /> <section id="id45"> <h2>20.9.0 (2020-09-22)<a class="headerlink" href="#id45" title="Link to this heading">¶</a></h2> <section id="id46"> <h3>Features<a class="headerlink" href="#id46" title="Link to this heading">¶</a></h3> <ul> <li><p>The embedded libev is now asked to detect the availability of <code class="docutils literal notranslate"><span class="pre">clock_gettime</span></code> and use the realtime and/or monotonic clocks, if they are available.</p> <p>On Linux, this can reduce the number of system calls libev makes. Originally provided by Josh Snyder. See <a class="extlink-issue reference external" href="https://github.com/gevent/gevent/issues/1648">issue #1648</a>.</p> </li> </ul> </section> <section id="id47"> <h3>Bugfixes<a class="headerlink" href="#id47" title="Link to this heading">¶</a></h3> <ul> <li><p>On CPython, depend on greenlet >= 0.4.17. This version is binary incompatible with earlier releases on CPython 3.7 and later.</p> <p>On Python 3.7 and above, the module <code class="docutils literal notranslate"><span class="pre">gevent.contextvars</span></code> is no longer monkey-patched into the standard library. contextvars are now both greenlet and asyncio task local. See <a class="extlink-issue reference external" href="https://github.com/gevent/gevent/issues/1656">issue #1656</a>. See <a class="extlink-issue reference external" href="https://github.com/gevent/gevent/issues/1674">issue #1674</a>.</p> </li> <li><p>The <code class="docutils literal notranslate"><span class="pre">DummyThread</span></code> objects created automatically by certain operations when the standard library threading module is monkey-patched now match the naming convention the standard library uses (“Dummy-12345”). Previously (since gevent 1.2a2) they used “DummyThread-12345”. See <a class="extlink-issue reference external" href="https://github.com/gevent/gevent/issues/1659">issue #1659</a>.</p></li> <li><p>Fix compatibility with dnspython 2.</p> <div class="admonition caution"> <p class="admonition-title">Caution</p> <p>This currently means that it can be imported. But it cannot yet be used. gevent has a pinned dependency on dnspython < 2 for now.</p> </div> <p>See <a class="extlink-issue reference external" href="https://github.com/gevent/gevent/issues/1661">issue #1661</a>.</p> </li> </ul> </section> </section> <hr class="docutils" /> <section id="id48"> <h2>20.6.2 (2020-06-16)<a class="headerlink" href="#id48" title="Link to this heading">¶</a></h2> <section id="id49"> <h3>Features<a class="headerlink" href="#id49" title="Link to this heading">¶</a></h3> <ul> <li><p>It is now possible to build and use the embedded libuv on a Cygwin platform.</p> <p>Note that Cygwin is not an officially supported platform of upstream libuv and is not tested by gevent, so the actual working status is unknown, and this may bitrot in future releases.</p> <p>Thanks to berkakinci for the patch. See <a class="extlink-issue reference external" href="https://github.com/gevent/gevent/issues/1645">issue #1645</a>.</p> </li> </ul> </section> <section id="id50"> <h3>Bugfixes<a class="headerlink" href="#id50" title="Link to this heading">¶</a></h3> <ul> <li><p>Relax the version constraint for psutil on PyPy.</p> <p>Previously it was pinned to 5.6.3 for PyPy2, except for on Windows, where it was excluded. It is now treated the same as CPython again. See <a class="extlink-issue reference external" href="https://github.com/gevent/gevent/issues/1643">issue #1643</a>.</p> </li> </ul> </section> </section> <hr class="docutils" /> <section id="id51"> <h2>20.6.1 (2020-06-10)<a class="headerlink" href="#id51" title="Link to this heading">¶</a></h2> <section id="id52"> <h3>Features<a class="headerlink" href="#id52" title="Link to this heading">¶</a></h3> <ul class="simple"> <li><p>gevent’s CI is now tested on Ubuntu 18.04 (Bionic), an upgrade from 16.04 (Xenial). See <a class="extlink-issue reference external" href="https://github.com/gevent/gevent/issues/1623">issue #1623</a>.</p></li> </ul> </section> <section id="id53"> <h3>Bugfixes<a class="headerlink" href="#id53" title="Link to this heading">¶</a></h3> <ul> <li><p>On Python 2, the dnspython resolver can be used without having selectors2 installed. Previously, an ImportError would be raised. See <a class="extlink-issue reference external" href="https://github.com/gevent/gevent/issues/1641">issue #1641</a>.</p></li> <li><p>Python 3 <code class="docutils literal notranslate"><span class="pre">gevent.ssl.SSLSocket</span></code> objects no longer attempt to catch <code class="docutils literal notranslate"><span class="pre">ConnectionResetError</span></code> and treat it the same as an <code class="docutils literal notranslate"><span class="pre">SSLError</span></code> with <code class="docutils literal notranslate"><span class="pre">SSL_ERROR_EOF</span></code> (typically by suppressing it).</p> <p>This was a difference from the way the standard library behaved (which is to raise the exception). It was added to gevent during early testing of OpenSSL 1.1 and TLS 1.3. See <a class="extlink-issue reference external" href="https://github.com/gevent/gevent/issues/1637">issue #1637</a>.</p> </li> </ul> </section> </section> <hr class="docutils" /> <section id="id54"> <h2>20.6.0 (2020-06-06)<a class="headerlink" href="#id54" title="Link to this heading">¶</a></h2> <section id="id55"> <h3>Features<a class="headerlink" href="#id55" title="Link to this heading">¶</a></h3> <ul> <li><p>Add <code class="docutils literal notranslate"><span class="pre">gevent.selectors</span></code> containing <code class="docutils literal notranslate"><span class="pre">GeventSelector</span></code>. This selector implementation uses gevent details to attempt to reduce overhead when polling many file descriptors, only some of which become ready at any given time.</p> <p>This is monkey-patched as <code class="docutils literal notranslate"><span class="pre">selectors.DefaultSelector</span></code> by default.</p> <p>This is available on Python 2 if the <code class="docutils literal notranslate"><span class="pre">selectors2</span></code> backport is installed. (This backport is installed automatically using the <code class="docutils literal notranslate"><span class="pre">recommended</span></code> extra.) When monkey-patching, <code class="docutils literal notranslate"><span class="pre">selectors</span></code> is made available as an alias to this module. See <a class="extlink-issue reference external" href="https://github.com/gevent/gevent/issues/1532">issue #1532</a>.</p> </li> <li><p>Depend on greenlet >= 0.4.16. This is required for CPython 3.9 and 3.10a0. See <a class="extlink-issue reference external" href="https://github.com/gevent/gevent/issues/1627">issue #1627</a>.</p></li> <li><p>Add support for Python 3.9.</p> <p>No binary wheels are available yet, however. See <a class="extlink-issue reference external" href="https://github.com/gevent/gevent/issues/1628">issue #1628</a>.</p> </li> </ul> </section> <section id="id56"> <h3>Bugfixes<a class="headerlink" href="#id56" title="Link to this heading">¶</a></h3> <ul> <li><p><code class="docutils literal notranslate"><span class="pre">gevent.socket.create_connection</span></code> and <code class="docutils literal notranslate"><span class="pre">gevent.socket.socket.connect</span></code> no longer ignore IPv6 scope IDs.</p> <p>Any IP address (IPv4 or IPv6) is no longer subject to an extra call to <code class="docutils literal notranslate"><span class="pre">getaddrinfo</span></code>. Depending on the resolver in use, this is likely to change the number and order of greenlet switches. (On Windows, in particular test cases when there are no other greenlets running, it has been observed to lead to <code class="docutils literal notranslate"><span class="pre">LoopExit</span></code> in scenarios that didn’t produce that before.) See <a class="extlink-issue reference external" href="https://github.com/gevent/gevent/issues/1634">issue #1634</a>.</p> </li> </ul> </section> </section> <hr class="docutils" /> <section id="id57"> <h2>20.5.2 (2020-05-28)<a class="headerlink" href="#id57" title="Link to this heading">¶</a></h2> <section id="id58"> <h3>Bugfixes<a class="headerlink" href="#id58" title="Link to this heading">¶</a></h3> <ul class="simple"> <li><p>Forking a process that had use the threadpool to run tasks that created their own hub would fail to clean up the threadpool by raising <code class="docutils literal notranslate"><span class="pre">greenlet.error</span></code>. See <a class="extlink-issue reference external" href="https://github.com/gevent/gevent/issues/1631">issue #1631</a>.</p></li> </ul> </section> </section> <hr class="docutils" /> <section id="id59"> <h2>20.5.1 (2020-05-26)<a class="headerlink" href="#id59" title="Link to this heading">¶</a></h2> <section id="id60"> <h3>Features<a class="headerlink" href="#id60" title="Link to this heading">¶</a></h3> <ul> <li><p>Waiters on Event and Semaphore objects that call <code class="docutils literal notranslate"><span class="pre">wait()</span></code> or <code class="docutils literal notranslate"><span class="pre">acquire()</span></code>, respectively, that find the Event already set, or the Semaphore available, no longer “cut in line” and run before any previously scheduled greenlets. They now run in the order in which they arrived, just as waiters that had to block in those methods do. See <a class="extlink-issue reference external" href="https://github.com/gevent/gevent/issues/1520">issue #1520</a>.</p></li> <li><p>Update tested PyPy version from 7.3.0 to 7.3.1 on Linux. See <a class="extlink-issue reference external" href="https://github.com/gevent/gevent/issues/1569">issue #1569</a>.</p></li> <li><p>Make <code class="docutils literal notranslate"><span class="pre">zope.interface</span></code>, <code class="docutils literal notranslate"><span class="pre">zope.event</span></code> and (by extension) <code class="docutils literal notranslate"><span class="pre">setuptools</span></code> required dependencies. The <code class="docutils literal notranslate"><span class="pre">events</span></code> install extra now does nothing and will be removed in 2021. See <a class="extlink-issue reference external" href="https://github.com/gevent/gevent/issues/1619">issue #1619</a>.</p></li> <li><p>Update bundled libuv from 1.36.0 to 1.38.0. See <a class="extlink-issue reference external" href="https://github.com/gevent/gevent/issues/1621">issue #1621</a>.</p></li> <li><p>Update bundled c-ares from 1.16.0 to 1.16.1.</p> <p>On macOS, stop trying to adjust c-ares headers to make them universal. See <a class="extlink-issue reference external" href="https://github.com/gevent/gevent/issues/1624">issue #1624</a>.</p> </li> </ul> </section> <section id="id61"> <h3>Bugfixes<a class="headerlink" href="#id61" title="Link to this heading">¶</a></h3> <ul> <li><p>Make gevent locks that are monkey-patched usually work across native threads as well as across greenlets within a single thread. Locks that are only used in a single thread do not take a performance hit. While cross-thread locking is relatively expensive, and not a recommended programming pattern, it can happen unwittingly, for example when using the threadpool and <code class="docutils literal notranslate"><span class="pre">logging</span></code>.</p> <p>Before, cross-thread lock uses might succeed, or, if the lock was contended, raise <code class="docutils literal notranslate"><span class="pre">greenlet.error</span></code>. Now, in the contended case, if the lock has been acquired by the main thread at least once, it should correctly block in any thread, cooperating with the event loop of both threads. In certain (hopefully rare) cases, it might be possible for contended case to raise <code class="docutils literal notranslate"><span class="pre">LoopExit</span></code> when previously it would have raised <code class="docutils literal notranslate"><span class="pre">greenlet.error</span></code>; if these cases are a practical concern, please open an issue.</p> <p>Also, the underlying Semaphore always behaves in an atomic fashion (as if the GIL was not released) when PURE_PYTHON is set. Previously, it only correctly did so on PyPy. See <a class="extlink-issue reference external" href="https://github.com/gevent/gevent/issues/1437">issue #1437</a>.</p> </li> <li><p>Rename gevent’s C accelerator extension modules using a prefix to avoid clashing with other C extensions. See <a class="extlink-issue reference external" href="https://github.com/gevent/gevent/issues/1480">issue #1480</a>.</p></li> <li><p>Using <code class="docutils literal notranslate"><span class="pre">gevent.wait</span></code> on an <code class="docutils literal notranslate"><span class="pre">Event</span></code> more than once, when that Event is already set, could previously raise an AssertionError.</p> <p>As part of this, exceptions raised in the main greenlet will now include a more complete traceback from the failing greenlet. See <a class="extlink-issue reference external" href="https://github.com/gevent/gevent/issues/1540">issue #1540</a>.</p> </li> <li><p>Avoid closing the same Python libuv watcher IO object twice. Under some circumstances (only seen on Windows), that could lead to program crashes. See <a class="extlink-issue reference external" href="https://github.com/gevent/gevent/issues/1587">issue #1587</a>.</p></li> <li><p>gevent can now be built using Cython 3.0a5 and newer. The PyPI distribution uses this version.</p> <p>The libev extension was incompatible with this. As part of this, certain internal, undocumented names have been changed.</p> <p>(Technically, gevent can be built with Cython 3.0a2 and above. However, up through 3.0a4 compiling with Cython 3 results in gevent’s test for memory leaks failing. See <a class="reference external" href="https://github.com/cython/cython/issues/3578">this Cython issue</a>.) See <a class="extlink-issue reference external" href="https://github.com/gevent/gevent/issues/1599">issue #1599</a>.</p> </li> <li><p>Destroying a hub after joining it didn’t necessarily clean up all resources associated with the hub, especially if the hub had been created in a secondary thread that was exiting. The hub and its parent greenlet could be kept alive.</p> <p>Now, destroying a hub drops the reference to the hub and ensures it cannot be switched to again. (Though using a new blocking API call may still create a new hub.)</p> <p>Joining a hub also cleans up some (small) memory resources that might have stuck around for longer before as well. See <a class="extlink-issue reference external" href="https://github.com/gevent/gevent/issues/1601">issue #1601</a>.</p> </li> <li><p>Fix some potential crashes under libuv when using <code class="docutils literal notranslate"><span class="pre">gevent.signal_handler</span></code>. The crashes were seen running the test suite and were non-deterministic. See <a class="extlink-issue reference external" href="https://github.com/gevent/gevent/issues/1606">issue #1606</a>.</p></li> </ul> </section> </section> <hr class="docutils" /> <section id="id62"> <h2>20.5.0 (2020-05-01)<a class="headerlink" href="#id62" title="Link to this heading">¶</a></h2> <section id="id63"> <h3>Features<a class="headerlink" href="#id63" title="Link to this heading">¶</a></h3> <ul class="simple"> <li><p>Update bundled c-ares to version 1.16.0. <a class="reference external" href="https://c-ares.haxx.se/changelog.html">Changes</a>. See <a class="extlink-issue reference external" href="https://github.com/gevent/gevent/issues/1588">issue #1588</a>.</p></li> <li><p>Update all the bundled <code class="docutils literal notranslate"><span class="pre">config.guess</span></code> and <code class="docutils literal notranslate"><span class="pre">config.sub</span></code> scripts. See <a class="extlink-issue reference external" href="https://github.com/gevent/gevent/issues/1589">issue #1589</a>.</p></li> <li><p>Update bundled libuv from 1.34.0 to 1.36.0. See <a class="extlink-issue reference external" href="https://github.com/gevent/gevent/issues/1597">issue #1597</a>.</p></li> </ul> </section> <section id="id64"> <h3>Bugfixes<a class="headerlink" href="#id64" title="Link to this heading">¶</a></h3> <ul> <li><p>Use <code class="docutils literal notranslate"><span class="pre">ares_getaddrinfo</span></code> instead of a manual lookup.</p> <p>This requires c-ares 1.16.0.</p> <p>Note that this may change the results, in particular their order.</p> <p>As part of this, certain parts of the c-ares extension were adapted to use modern Cython idioms.</p> <p>A few minor errors and discrepancies were fixed as well, such as <code class="docutils literal notranslate"><span class="pre">gethostbyaddr('localhost')</span></code> working on Python 3 and failing on Python 2. The DNSpython resolver now raises the expected TypeError in more cases instead of an AttributeError. See <a class="extlink-issue reference external" href="https://github.com/gevent/gevent/issues/1012">issue #1012</a>.</p> </li> <li><p>The c-ares and DNSPython resolvers now raise exceptions much more consistently with the standard resolver. Types and errnos are substantially more likely to match what the standard library produces.</p> <p>Depending on the system and configuration, results may not match exactly, at least with DNSPython. There are still some rare cases where the system resolver can raise <code class="docutils literal notranslate"><span class="pre">herror</span></code> but DNSPython will raise <code class="docutils literal notranslate"><span class="pre">gaierror</span></code> or vice versa. There doesn’t seem to be a deterministic way to account for this. On PyPy, <code class="docutils literal notranslate"><span class="pre">getnameinfo</span></code> can produce results when CPython raises <code class="docutils literal notranslate"><span class="pre">socket.error</span></code>, and gevent’s DNSPython resolver also raises <code class="docutils literal notranslate"><span class="pre">socket.error</span></code>.</p> <p>In addition, several other small discrepancies were addressed, including handling of localhost and broadcast host names.</p> <div class="admonition note"> <p class="admonition-title">Note</p> <p>This has been tested on Linux (CentOS and Ubuntu), macOS, and Windows. It hasn’t been tested on other platforms, so results are unknown for them. The c-ares support, in particular, is using some additional socket functions and defines. Please let the maintainers know if this introduces issues.</p> </div> <p>See <a class="extlink-issue reference external" href="https://github.com/gevent/gevent/issues/1459">issue #1459</a>.</p> </li> </ul> </section> </section> <hr class="docutils" /> <section id="id65"> <h2>20.04.0 (2020-04-22)<a class="headerlink" href="#id65" title="Link to this heading">¶</a></h2> <section id="id66"> <h3>Features<a class="headerlink" href="#id66" title="Link to this heading">¶</a></h3> <ul class="simple"> <li><p>Let CI (Travis and Appveyor) build and upload release wheels for Windows, macOS and manylinux. As part of this, (a subset of) gevent’s tests can run if the standard library’s <code class="docutils literal notranslate"><span class="pre">test.support</span></code> module has been stripped. See <a class="extlink-issue reference external" href="https://github.com/gevent/gevent/issues/1555">issue #1555</a>.</p></li> <li><p>Update tested PyPy version from 7.2.0 on Windows to 7.3.1. See <a class="extlink-issue reference external" href="https://github.com/gevent/gevent/issues/1569">issue #1569</a>.</p></li> </ul> </section> <section id="id67"> <h3>Bugfixes<a class="headerlink" href="#id67" title="Link to this heading">¶</a></h3> <ul class="simple"> <li><p>Fix a spurious warning about watchers and resource leaks on libuv on Windows. Reported by Stéphane Rainville. See <a class="extlink-issue reference external" href="https://github.com/gevent/gevent/issues/1564">issue #1564</a>.</p></li> <li><p>Make monkey-patching properly remove <code class="docutils literal notranslate"><span class="pre">select.epoll</span></code> and <code class="docutils literal notranslate"><span class="pre">select.kqueue</span></code>. Reported by Kirill Smelkov. See <a class="extlink-issue reference external" href="https://github.com/gevent/gevent/issues/1570">issue #1570</a>.</p></li> <li><p>Make it possible to monkey-patch <a class="reference external" href="https://docs.python.org/3/library/contextvars.html#module-contextvars" title="(in Python v3.13)"><code class="xref py py-mod docutils literal notranslate"><span class="pre">contextvars</span></code></a> before Python 3.7 if a non-standard backport that uses the same name as the standard library does is installed. Previously this would raise an error. Reported by Simon Davy. See <a class="extlink-issue reference external" href="https://github.com/gevent/gevent/issues/1572">issue #1572</a>.</p></li> <li><p>Fix destroying the libuv default loop and then using the default loop again. See <a class="extlink-issue reference external" href="https://github.com/gevent/gevent/issues/1580">issue #1580</a>.</p></li> <li><p>libuv loops that have watched children can now exit. Previously, the SIGCHLD watcher kept the loop alive even if there were no longer any watched children. See <a class="extlink-issue reference external" href="https://github.com/gevent/gevent/issues/1581">issue #1581</a>.</p></li> </ul> </section> <section id="id68"> <h3>Deprecations and Removals<a class="headerlink" href="#id68" title="Link to this heading">¶</a></h3> <ul class="simple"> <li><p>PyPy no longer uses the Python allocation functions for libuv and libev allocations. See <a class="extlink-issue reference external" href="https://github.com/gevent/gevent/issues/1569">issue #1569</a>.</p></li> </ul> </section> <section id="id69"> <h3>Misc<a class="headerlink" href="#id69" title="Link to this heading">¶</a></h3> <ul class="simple"> <li><p>See <a class="extlink-issue reference external" href="https://github.com/gevent/gevent/issues/1367">issue #1367</a>.</p></li> </ul> </section> </section> <section id="older-releases"> <h2>Older Releases<a class="headerlink" href="#older-releases" title="Link to this heading">¶</a></h2> <p>For full information on older versions, see <a class="reference internal" href="older_releases.html"><span class="doc">Information About Older Releases</span></a>.</p> <div class="toctree-wrapper compound"> <p class="caption" role="heading"><span class="caption-text">Older change logs, without context.</span></p> <ul> <li class="toctree-l1"><a class="reference internal" href="changelog_1_5.html">Changes for 1.5</a><ul> <li class="toctree-l2"><a class="reference internal" href="changelog_1_5.html#id1">1.5.0 (2020-04-10)</a></li> <li class="toctree-l2"><a class="reference internal" href="changelog_1_5.html#a4-2020-03-23">1.5a4 (2020-03-23)</a></li> <li class="toctree-l2"><a class="reference internal" href="changelog_1_5.html#a3-2020-01-01">1.5a3 (2020-01-01)</a></li> <li class="toctree-l2"><a class="reference internal" href="changelog_1_5.html#a2-2019-10-21">1.5a2 (2019-10-21)</a></li> <li class="toctree-l2"><a class="reference internal" href="changelog_1_5.html#a1-2019-05-02">1.5a1 (2019-05-02)</a></li> </ul> </li> <li class="toctree-l1"><a class="reference internal" href="changelog_1_4.html">Changes for 1.4</a><ul> <li class="toctree-l2"><a class="reference internal" href="changelog_1_4.html#id1">1.4.0 (2019-01-04)</a></li> </ul> </li> <li class="toctree-l1"><a class="reference internal" href="changelog_1_3.html">Changes for 1.3</a><ul> <li class="toctree-l2"><a class="reference internal" href="changelog_1_3.html#id1">1.3.7 (2018-10-12)</a></li> <li class="toctree-l2"><a class="reference internal" href="changelog_1_3.html#id2">1.3.6 (2018-08-17)</a></li> <li class="toctree-l2"><a class="reference internal" href="changelog_1_3.html#id3">1.3.5 (2018-07-16)</a></li> <li class="toctree-l2"><a class="reference internal" href="changelog_1_3.html#id4">1.3.4 (2018-06-20)</a></li> <li class="toctree-l2"><a class="reference internal" href="changelog_1_3.html#id5">1.3.3 (2018-06-08)</a></li> <li class="toctree-l2"><a class="reference internal" href="changelog_1_3.html#post0-2018-05-30">1.3.2.post0 (2018-05-30)</a></li> <li class="toctree-l2"><a class="reference internal" href="changelog_1_3.html#id6">1.3.2 (2018-05-29)</a></li> <li class="toctree-l2"><a class="reference internal" href="changelog_1_3.html#id7">1.3.1 (2018-05-18)</a></li> <li class="toctree-l2"><a class="reference internal" href="changelog_1_3.html#id8">1.3.0 (2018-05-11)</a></li> <li class="toctree-l2"><a class="reference internal" href="changelog_1_3.html#b2-2018-05-03">1.3b2 (2018-05-03)</a></li> <li class="toctree-l2"><a class="reference internal" href="changelog_1_3.html#b1-2018-04-13">1.3b1 (2018-04-13)</a></li> <li class="toctree-l2"><a class="reference internal" href="changelog_1_3.html#a2-2018-03-06">1.3a2 (2018-03-06)</a></li> <li class="toctree-l2"><a class="reference internal" href="changelog_1_3.html#a1-2018-01-27">1.3a1 (2018-01-27)</a></li> </ul> </li> <li class="toctree-l1"><a class="reference internal" href="changelog_1_2.html">Changes for 1.2</a><ul> <li class="toctree-l2"><a class="reference internal" href="changelog_1_2.html#id1">1.2.2 (2017-06-05)</a></li> <li class="toctree-l2"><a class="reference internal" href="changelog_1_2.html#id2">1.2.1 (2017-01-12)</a></li> <li class="toctree-l2"><a class="reference internal" href="changelog_1_2.html#id3">1.2.0 (2016-12-23)</a></li> <li class="toctree-l2"><a class="reference internal" href="changelog_1_2.html#a2-dec-9-2016">1.2a2 (Dec 9, 2016)</a></li> <li class="toctree-l2"><a class="reference internal" href="changelog_1_2.html#a1-oct-27-2016">1.2a1 (Oct 27, 2016)</a></li> </ul> </li> <li class="toctree-l1"><a class="reference internal" href="changelog_1_1.html">Changes for 1.1</a><ul> <li class="toctree-l2"><a class="reference internal" href="changelog_1_1.html#jul-21-2016">1.1.2 (Jul 21, 2016)</a></li> <li class="toctree-l2"><a class="reference internal" href="changelog_1_1.html#apr-4-2016">1.1.1 (Apr 4, 2016)</a></li> <li class="toctree-l2"><a class="reference internal" href="changelog_1_1.html#mar-5-2016">1.1.0 (Mar 5, 2016)</a></li> <li class="toctree-l2"><a class="reference internal" href="changelog_1_1.html#rc5-feb-24-2016">1.1rc5 (Feb 24, 2016)</a></li> <li class="toctree-l2"><a class="reference internal" href="changelog_1_1.html#rc4-feb-16-2016">1.1rc4 (Feb 16, 2016)</a></li> <li class="toctree-l2"><a class="reference internal" href="changelog_1_1.html#rc3-jan-04-2016">1.1rc3 (Jan 04, 2016)</a></li> <li class="toctree-l2"><a class="reference internal" href="changelog_1_1.html#rc2-dec-11-2015">1.1rc2 (Dec 11, 2015)</a></li> <li class="toctree-l2"><a class="reference internal" href="changelog_1_1.html#rc1-nov-14-2015">1.1rc1 (Nov 14, 2015)</a></li> <li class="toctree-l2"><a class="reference internal" href="changelog_1_1.html#b6-oct-17-2015">1.1b6 (Oct 17, 2015)</a></li> <li class="toctree-l2"><a class="reference internal" href="changelog_1_1.html#b5-sep-18-2015">1.1b5 (Sep 18, 2015)</a></li> <li class="toctree-l2"><a class="reference internal" href="changelog_1_1.html#b4-sep-4-2015">1.1b4 (Sep 4, 2015)</a></li> <li class="toctree-l2"><a class="reference internal" href="changelog_1_1.html#b3-aug-16-2015">1.1b3 (Aug 16, 2015)</a></li> <li class="toctree-l2"><a class="reference internal" href="changelog_1_1.html#b2-aug-5-2015">1.1b2 (Aug 5, 2015)</a></li> <li class="toctree-l2"><a class="reference internal" href="changelog_1_1.html#b1-jul-17-2015">1.1b1 (Jul 17, 2015)</a></li> <li class="toctree-l2"><a class="reference internal" href="changelog_1_1.html#a2-jul-8-2015">1.1a2 (Jul 8, 2015)</a></li> <li class="toctree-l2"><a class="reference internal" href="changelog_1_1.html#a1-jun-29-2015">1.1a1 (Jun 29, 2015)</a></li> </ul> </li> <li class="toctree-l1"><a class="reference internal" href="changelog_1_0.html">Changes for 1.0</a><ul> <li class="toctree-l2"><a class="reference internal" href="changelog_1_0.html#release-1-0-2">Release 1.0.2</a></li> <li class="toctree-l2"><a class="reference internal" href="changelog_1_0.html#release-1-0-1">Release 1.0.1</a></li> <li class="toctree-l2"><a class="reference internal" href="changelog_1_0.html#release-1-0-nov-26-2013">Release 1.0 (Nov 26, 2013)</a></li> <li class="toctree-l2"><a class="reference internal" href="changelog_1_0.html#release-1-0rc3-sep-14-2013">Release 1.0rc3 (Sep 14, 2013)</a></li> <li class="toctree-l2"><a class="reference internal" href="changelog_1_0.html#release-1-0rc2-dec-10-2012">Release 1.0rc2 (Dec 10, 2012)</a></li> <li class="toctree-l2"><a class="reference internal" href="changelog_1_0.html#release-1-0rc1-oct-30-2012">Release 1.0rc1 (Oct 30, 2012)</a></li> <li class="toctree-l2"><a class="reference internal" href="changelog_1_0.html#release-1-0b4-sep-6-2012">Release 1.0b4 (Sep 6, 2012)</a></li> <li class="toctree-l2"><a class="reference internal" href="changelog_1_0.html#release-1-0b3-jul-27-2012">Release 1.0b3 (Jul 27, 2012)</a></li> <li class="toctree-l2"><a class="reference internal" href="changelog_1_0.html#release-1-0b2-apr-11-2012">Release 1.0b2 (Apr 11, 2012)</a></li> <li class="toctree-l2"><a class="reference internal" href="changelog_1_0.html#release-1-0b1-jan-10-2012">Release 1.0b1 (Jan 10, 2012)</a></li> <li class="toctree-l2"><a class="reference internal" href="changelog_1_0.html#release-1-0a3-sep-15-2011">Release 1.0a3 (Sep 15, 2011)</a></li> <li class="toctree-l2"><a class="reference internal" href="changelog_1_0.html#release-1-0a2-aug-2-2011">Release 1.0a2 (Aug 2, 2011)</a></li> <li class="toctree-l2"><a class="reference internal" href="changelog_1_0.html#release-1-0a1-aug-2-2011">Release 1.0a1 (Aug 2, 2011)</a></li> </ul> </li> <li class="toctree-l1"><a class="reference internal" href="changelog_pre.html">Changes before gevent 1.0</a><ul> <li class="toctree-l2"><a class="reference internal" href="changelog_pre.html#release-0-13-8-september-6-2012">Release 0.13.8 (September 6, 2012)</a></li> <li class="toctree-l2"><a class="reference internal" href="changelog_pre.html#release-0-13-7-april-12-2012">Release 0.13.7 (April 12, 2012)</a></li> <li class="toctree-l2"><a class="reference internal" href="changelog_pre.html#release-0-13-6-may-2-2011">Release 0.13.6 (May 2, 2011)</a></li> <li class="toctree-l2"><a class="reference internal" href="changelog_pre.html#release-0-13-5-apr-21-2011">Release 0.13.5 (Apr 21, 2011)</a></li> <li class="toctree-l2"><a class="reference internal" href="changelog_pre.html#release-0-13-4-apr-11-2011">Release 0.13.4 (Apr 11, 2011)</a></li> <li class="toctree-l2"><a class="reference internal" href="changelog_pre.html#release-0-13-3-feb-7-2011">Release 0.13.3 (Feb 7, 2011)</a></li> <li class="toctree-l2"><a class="reference internal" href="changelog_pre.html#release-0-13-2-jan-28-2011">Release 0.13.2 (Jan 28, 2011)</a></li> <li class="toctree-l2"><a class="reference internal" href="changelog_pre.html#release-0-13-1-sep-23-2010">Release 0.13.1 (Sep 23, 2010)</a></li> <li class="toctree-l2"><a class="reference internal" href="changelog_pre.html#release-0-13-0-jul-14-2010">Release 0.13.0 (Jul 14, 2010)</a></li> <li class="toctree-l2"><a class="reference internal" href="changelog_pre.html#release-0-12-2-mar-2-2010">Release 0.12.2 (Mar 2, 2010)</a></li> <li class="toctree-l2"><a class="reference internal" href="changelog_pre.html#release-0-12-1-feb-26-2010">Release 0.12.1 (Feb 26, 2010)</a></li> <li class="toctree-l2"><a class="reference internal" href="changelog_pre.html#release-0-12-0-feb-5-2010">Release 0.12.0 (Feb 5, 2010)</a></li> <li class="toctree-l2"><a class="reference internal" href="changelog_pre.html#release-0-11-2-dec-10-2009">Release 0.11.2 (Dec 10, 2009)</a></li> <li class="toctree-l2"><a class="reference internal" href="changelog_pre.html#release-0-11-1-nov-15-2009">Release 0.11.1 (Nov 15, 2009)</a></li> <li class="toctree-l2"><a class="reference internal" href="changelog_pre.html#release-0-11-0-oct-9-2009">Release 0.11.0 (Oct 9, 2009)</a></li> <li class="toctree-l2"><a class="reference internal" href="changelog_pre.html#release-0-10-0-aug-26-2009">Release 0.10.0 (Aug 26, 2009)</a></li> <li class="toctree-l2"><a class="reference internal" href="changelog_pre.html#release-0-9-3-aug-3-2009">Release 0.9.3 (Aug 3, 2009)</a></li> <li class="toctree-l2"><a class="reference internal" href="changelog_pre.html#release-0-9-2-jul-20-2009">Release 0.9.2 (Jul 20, 2009)</a></li> <li class="toctree-l2"><a class="reference internal" href="changelog_pre.html#release-0-9-1-jul-9-2009">Release 0.9.1 (Jul 9, 2009)</a></li> <li class="toctree-l2"><a class="reference internal" href="changelog_pre.html#release-0-9-0-jul-8-2009">Release 0.9.0 (Jul 8, 2009)</a></li> </ul> </li> </ul> </div> </section> </section> </article> </div> <footer> <div class="related-pages"> <a class="next-page" href="changelog_1_5.html"> <div class="page-info"> <div class="context"> <span>Next</span> </div> <div class="title">Changes for 1.5</div> </div> <svg class="furo-related-icon"><use href="#svg-arrow-right"></use></svg> </a> <a class="prev-page" href="install.html"> <svg class="furo-related-icon"><use href="#svg-arrow-right"></use></svg> <div class="page-info"> <div class="context"> <span>Previous</span> </div> <div class="title">Installation and Requirements</div> </div> </a> </div> <div class="bottom-of-page"> <div class="left-details"> <div class="copyright"> Copyright © 2009-2023, gevent contributors </div> Made with <a href="https://www.sphinx-doc.org/">Sphinx</a> and <a class="muted-link" href="https://pradyunsg.me">@pradyunsg</a>'s <a href="https://github.com/pradyunsg/furo">Furo</a> </div> <div class="right-details"> </div> </div> </footer> </div> <aside class="toc-drawer"> <div class="toc-sticky toc-scroll"> <div class="toc-title-container"> <span class="toc-title"> On this page </span> </div> <div class="toc-tree-container"> <div class="toc-tree"> <ul> <li><a class="reference internal" href="#">Changelog</a><ul> <li><a class="reference internal" href="#id1">24.11.1 (2024-11-11)</a><ul> <li><a class="reference internal" href="#bugfixes">Bugfixes</a></li> </ul> </li> <li><a class="reference internal" href="#id2">24.10.3 (2024-10-18)</a><ul> <li><a class="reference internal" href="#id3">Bugfixes</a></li> </ul> </li> <li><a class="reference internal" href="#id4">24.10.2 (2024-10-11)</a><ul> <li><a class="reference internal" href="#id5">Bugfixes</a></li> </ul> </li> <li><a class="reference internal" href="#id6">24.10.1 (2024-10-09)</a><ul> <li><a class="reference internal" href="#features">Features</a></li> <li><a class="reference internal" href="#id7">Bugfixes</a></li> <li><a class="reference internal" href="#deprecations-and-removals">Deprecations and Removals</a></li> </ul> </li> <li><a class="reference internal" href="#id8">24.2.1 (2024-02-14)</a><ul> <li><a class="reference internal" href="#id9">Bugfixes</a></li> <li><a class="reference internal" href="#other">Other</a></li> </ul> </li> <li><a class="reference internal" href="#id10">23.9.1 (2023-09-12)</a><ul> <li><a class="reference internal" href="#id11">Bugfixes</a></li> </ul> </li> <li><a class="reference internal" href="#post1-2023-09-02">23.9.0.post1 (2023-09-02)</a></li> <li><a class="reference internal" href="#id12">23.9.0 (2023-09-01)</a><ul> <li><a class="reference internal" href="#id13">Bugfixes</a></li> </ul> </li> <li><a class="reference internal" href="#id14">23.7.0 (2023-07-11)</a><ul> <li><a class="reference internal" href="#id15">Features</a></li> <li><a class="reference internal" href="#id16">Bugfixes</a></li> <li><a class="reference internal" href="#id17">Deprecations and Removals</a></li> </ul> </li> <li><a class="reference internal" href="#id18">22.10.2 (2022-10-31)</a><ul> <li><a class="reference internal" href="#id19">Bugfixes</a></li> </ul> </li> <li><a class="reference internal" href="#id20">22.10.1 (2022-10-14)</a><ul> <li><a class="reference internal" href="#id21">Features</a></li> <li><a class="reference internal" href="#misc">Misc</a></li> </ul> </li> <li><a class="reference internal" href="#id22">22.08.0 (2022-10-08)</a><ul> <li><a class="reference internal" href="#id23">Features</a></li> <li><a class="reference internal" href="#id24">Bugfixes</a></li> </ul> </li> <li><a class="reference internal" href="#id25">21.12.0 (2021-12-11)</a><ul> <li><a class="reference internal" href="#id26">Features</a></li> <li><a class="reference internal" href="#id27">Bugfixes</a></li> </ul> </li> <li><a class="reference internal" href="#id28">21.8.0 (2021-08-05)</a><ul> <li><a class="reference internal" href="#id29">Features</a></li> <li><a class="reference internal" href="#id30">Misc</a></li> </ul> </li> <li><a class="reference internal" href="#id31">21.1.2 (2021-01-20)</a><ul> <li><a class="reference internal" href="#id32">Features</a></li> <li><a class="reference internal" href="#id33">Misc</a></li> </ul> </li> <li><a class="reference internal" href="#id34">21.1.1 (2021-01-18)</a><ul> <li><a class="reference internal" href="#id35">Bugfixes</a></li> </ul> </li> <li><a class="reference internal" href="#id36">21.1.0 (2021-01-15)</a><ul> <li><a class="reference internal" href="#id37">Bugfixes</a></li> <li><a class="reference internal" href="#id38">Misc</a></li> </ul> </li> <li><a class="reference internal" href="#id39">20.12.1 (2020-12-27)</a><ul> <li><a class="reference internal" href="#id40">Features</a></li> <li><a class="reference internal" href="#id41">Bugfixes</a></li> </ul> </li> <li><a class="reference internal" href="#id42">20.12.0 (2020-12-22)</a><ul> <li><a class="reference internal" href="#id43">Features</a></li> <li><a class="reference internal" href="#id44">Bugfixes</a></li> </ul> </li> <li><a class="reference internal" href="#id45">20.9.0 (2020-09-22)</a><ul> <li><a class="reference internal" href="#id46">Features</a></li> <li><a class="reference internal" href="#id47">Bugfixes</a></li> </ul> </li> <li><a class="reference internal" href="#id48">20.6.2 (2020-06-16)</a><ul> <li><a class="reference internal" href="#id49">Features</a></li> <li><a class="reference internal" href="#id50">Bugfixes</a></li> </ul> </li> <li><a class="reference internal" href="#id51">20.6.1 (2020-06-10)</a><ul> <li><a class="reference internal" href="#id52">Features</a></li> <li><a class="reference internal" href="#id53">Bugfixes</a></li> </ul> </li> <li><a class="reference internal" href="#id54">20.6.0 (2020-06-06)</a><ul> <li><a class="reference internal" href="#id55">Features</a></li> <li><a class="reference internal" href="#id56">Bugfixes</a></li> </ul> </li> <li><a class="reference internal" href="#id57">20.5.2 (2020-05-28)</a><ul> <li><a class="reference internal" href="#id58">Bugfixes</a></li> </ul> </li> <li><a class="reference internal" href="#id59">20.5.1 (2020-05-26)</a><ul> <li><a class="reference internal" href="#id60">Features</a></li> <li><a class="reference internal" href="#id61">Bugfixes</a></li> </ul> </li> <li><a class="reference internal" href="#id62">20.5.0 (2020-05-01)</a><ul> <li><a class="reference internal" href="#id63">Features</a></li> <li><a class="reference internal" href="#id64">Bugfixes</a></li> </ul> </li> <li><a class="reference internal" href="#id65">20.04.0 (2020-04-22)</a><ul> <li><a class="reference internal" href="#id66">Features</a></li> <li><a class="reference internal" href="#id67">Bugfixes</a></li> <li><a class="reference internal" href="#id68">Deprecations and Removals</a></li> <li><a class="reference internal" href="#id69">Misc</a></li> </ul> </li> <li><a class="reference internal" href="#older-releases">Older Releases</a></li> </ul> </li> </ul> </div> </div> </div> </aside> </div> </div><script src="_static/documentation_options.js?v=32fdf4fc"></script> <script src="_static/doctools.js?v=9bcbadda"></script> <script src="_static/sphinx_highlight.js?v=dc90522c"></script> <script src="_static/scripts/furo.js?v=5fa4622c"></script> </body> </html>