2.1.1 (2024-04-08) ------------------ * `#267 `__ Fixed regression in 2.1.0 where the ``strconfig`` argument to ``load``/``loads`` is ignored. 2.1.0 (2024-04-05) ------------------ * `#243 `__: Added ``main_thread_only`` execmodel which is derived from the thread execmodel and only executes ``remote_exec`` calls in the main thread. Callers of ``remote_exec`` must use the returned channel to wait for a task to complete before they call remote_exec again, otherwise the ``remote_exec`` call will fail with a ``concurrent remote_exec would cause deadlock`` error. The main_thread_only execmodel provides solutions for `#96 `__ and `pytest-dev/pytest-xdist#620 `__ (pending a new `pytest-xdist` release). Also fixed ``init_popen_io`` to use ``closefd=False`` for shared stdin and stdout file descriptors, preventing ``Bad file descriptor`` errors triggered by test_stdouterrin_setnull. * The library is now typed and the typing is exposed to type-checkers. * Re-exported ``Gateway``, ``Channel``, ``DumpError`` and ``LoadError`` from ``execnet``. The constructors are private. * Fixed ``GatewayBase.join()`` timeout argument getting ignored. * Removed support for Python 3.7. * Added official support for Python 3.12. 2.0.2 (2023-07-09) ------------------ * Re-release without code changes, just to include ``tox.ini`` into the source distribution. 2.0.1 (2023-07-08) ------------------ * Re-release without code changes, just to include docs and tests into the source distribution. 2.0.0 (2023-07-06) ------------------ * Removed support for Python < 3.7. - Applied ``pyupgrade --py37-plus``. - Minimal ``mypy`` fixes and dropped Python 2 support code. * Migrated packaging to ``hatch``. * Dropped deprecated APIs of old makegateway names. * Removed ``py`` testing dependency. * Explicitly pass ``encoding`` when opening files in the gateway to get rid of warnings when using ``PYTHONWARNDEFAULTENCODING=1`` (#195). * Fixed error when loading source code files from a path containing non-ascii characters. 1.9.0 (2021-06-13) ------------------ * Removed the ``apipkg`` dependency. 1.8.1 (2021-05-27) ------------------ * Update calls of `threading.Event.isSet()` to `threading.Event.is_set()`, which avoids a deprecation warning with Python 3.10. 1.8.0 (2021-01-27) ------------------ * Dropped support for Python 3.4. * `#118 `__: Fixed internal leak that should make ``execnet`` execute remote code in the main thread more often; previously it would sometimes spawn a thread to execute a ``remote_exec`` call, even when the caller didn't issue multiple ``remote_exec`` calls at the same time. Some frameworks require code to execute in the main thread, so the previous behavior would break them on occasion (see `pytest-dev/pytest-xdist#620 `__ for an example). * `#115 `__: Current working directory is now restored when calling ``script/socketserver.py``. The script now also loops by default when called from the command-line. 1.7.1 (2019-08-28) ------------------ * `#108 `__: Revert ``linecache`` optimization introduced in ``1.7.0`` which broke remote execution. 1.7.0 (2019-08-08) ------------------ * `#102 `__: Show paths in stack traces generated by ``remote_exec()``. * `#100 `__: Fix flaky hangs in ``workerpool.waitall``. 1.6.1 (2019-07-22) ------------------ * `#98 `__: Internal change to avoid using deprecated ``funcargs`` name in pytest 5+. 1.6.0 (2019-03-31) ------------------ * ``execnet`` no longer supports Python 2.6 and 3.3 (#85). Users of those Python versions using a recent enough ``pip`` should not be affected, as ``pip`` will only install ``1.5.0`` for them. * Update test suite to support ``pytest>4``. 1.5.0 (2017-10-16) ------------------ - support shell escaping in python pathnames of popen. Eugene Ciurana discovered that execnet breaks if you use pathnames with spaces in a "python=" part of a spec. We now use shlex.split to split the string. There is a potential for regressions if you used quote or escape sequences as part of your python command. - Only insert importdir into sys.path if it is not already in the path. This prevents a bug when using enum34 with python 3.6 and pytest-xdist. The issue is that enum34 installs an 'enum' module in site-packages which is normally shadowed by the stdlib version of enum, however in gateway_bootstrap.py site-packages is added at the front the the search path. This means on the workers enum34 is hit for import enum which in turn causes import re to fail (as it makes use of the new enum features in 3.6). - fix #49 - use inspect.getfullargspec if possible to avoid deprecationwarnings - fix #56 - use partials in safe_terminate to avoid a bad carried binding - fix spec parsing on Windows due to path containing '\' characters. 1.4.1 (2015-09-02) ------------------ - fix a regression of the Serializer created by the implied opcode ordering which resulted in a incompatible opcode mapping *warning* stored serialized objects created with 1.4.0 are incompatible with previous versions and future versions additionally stored serialized objects containing complex objects will have a incompatible opcode when read with execnet < 1.4.0 and won't be loadable with execnet 1.4.0 either its strongly suggested to avoid using the Serializer of execnet 1.4.0 this affects devpi and the external pytest-cache plugin 1.4 ---- - de-vendor apipkg and use the pypi dependency instead (this also fixes the bpython interaction issues) - Fix issue38: provide ability to connect to Vagrant VMs easily using :code:`vagrant_ssh=default` or :code:`vagrant_ssh=machinename` this feature is experimental and will be refined in future releases. Thanks Christian Theune for the discussion and the initial pull request. - add support for serializing the "complex" type. Thanks Sebastian Koslowski. 1.3 -------------------------------- - fix issue33: index.txt to correctly mention MIT instead of GPL. - fix issue35: adapt some doctests, fix some channel tests for py3. - use subprocess32 when available for python < 3. - try to be a bit more careful when interpreter is shutting down to avoid random exceptions, thanks Alfredo Deza. - ignore errors on orphan file removal when rsyncing - fix issue34: limit use of import based bootstrap 1.2 -------------------------------- - fix issue22 -- during interpreter shutdown don't throw an exception when we can't send a termination sequence anymore as we are about to die anyway. - fix issue24 -- allow concurrent creation of gateways by guarding automatic id creation by a look. Thanks tlecomte. - majorly refactor internal thread and IO handling. execnet can now operate on different thread models, defaults to "thread" but allows for eventlet and gevent if it is installed. - gateway.remote_exec() will now execute in multiple threads on the other side by default. The previous necessity of running "gateway.remote_init_threads()" to allow for such concurrency is gone. The latter method is now a no-op and will be removed in future versions of execnet. - fix issue20: prevent AttributError at interpreter shutdown by not trying to send close/last_message messages if the world around is half destroyed. - fix issue21: allow to create local gateways with sudo aka makegateway("popen//python=sudo python"). Thanks Alfredo Deza for the PR. - streamline gateway termination and simplify proxy implementation. add more internal tracing. - if execution hangs in computation, we now try to send a SIGINT to ourselves on Unix platforms instead of just calling thread.interrupt_main() - change license from GPL to MIT - introduce execnet.dump/load variants of dumps/loads serializing/unserializing mechanism. - improve channel.receive() communication latency on python2 by changing the default timeout of the underlying Queue.get to a regular None instead of the previous default -1 which caused an internal positive timeout value (a hack probably introduced to allow CTRL-C to pass through for 30%) - refine internal gateway exit/termination procedure and introduce group.terminate(timeout) which will attempt to kill all subprocesses that did not terminate within time. - EOFError on channel.receive/waitclose if the other side unexpectedly went away. When a gateway exits it now internally sends an explicit termination message instead of abruptly closing. - introduce a timeout parameter to channel.receive() and default to periodically internally wake up to let KeyboardInterrupts pass through. - EXECNET_DEBUG=2 will cause tracing to go to stderr, which with popen worker gateways will relay back tracing to the instantiator process. 1.0.0 -------------------------------- * introduce execnet.Group for managing gateway creation and termination. Introduce execnet.default_group through which all "global" calls are routed. cleanup gateway termination. All Gateways get an id through which they can be retrieved from a group object. * deprecate execnet.XYZGateway in favour of direct makegateway() calls. * refine socketserver-examples, experimentally introduce a way to indirectly setup a socket server ("installvia") through a gateway url. * refine and automatically test documentation examples 1.0.0b3 -------------------------------- * fix EXECNET_DEBUG to work with win32 * add support for serializing longs, sets and frozensets (thanks Benjamin Peterson) * introduce remote_status() method which on the low level gives information about the remote side of a gateway * disallow explicit close in remote_exec situation * perform some more detailed tracing with EXECNET_DEBUG 1.0.0b2 -------------------------------- * make internal protocols more robust against serialization failures * fix a serialization bug with nested tuples containing empty tuples (thanks to ronny for discovering it) * setting the environment variable EXECNET_DEBUG will generate per process trace-files for debugging 1.0.0b1 ---------------------------- * added new examples for NumPy, Jython, IronPython * improved documentation * include apipkg.py for lazy-importing * integrated new serializer code from Benjamin Peterson * improved support for Jython-2.5.1 1.0.0alpha2 ---------------------------- * improve documentation, new website * use sphinx for documentation, added boilerplate files and setup.py * fixes for standalone usage, adding boilerplate files * imported py/execnet and made it work standalone