Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

testing/test_channel.py::TestChannelBasicBehaviour::test_channel_callback_remote_freed tests fail on Python 3.13.0 freethreading #306

Open
mgorny opened this issue Oct 14, 2024 · 1 comment

Comments

@mgorny
Copy link

mgorny commented Oct 14, 2024

When running the test suite on the Python 3.13.0 freethreading version (--without-gil), I'm getting the following test failures:

$ python -m pytest
========================================================= test session starts =========================================================
platform linux -- Python 3.13.0, pytest-8.3.3, pluggy-1.5.0
rootdir: /tmp/execnet
configfile: tox.ini
testpaths: testing
plugins: timeout-2.3.1
timeout: 20.0s
timeout method: signal
timeout func_only: False
collected 1095 items                                                                                                                  

testing/test_basics.py ...........................                                                                              [  2%]
testing/test_channel.py ..s...s...s...s...s...s...s...s...s...s...s...s...s...s...s...s...s...s...s.FFsF..s...s...s...s...s...s [ 11%]
...s...s...s...s.                                                                                                               [ 13%]
testing/test_gateway.py ..s...s...s...s...s...s.XXsX..s...s...s...s...s...s...s...s...s...s...s...s...s....ssss                 [ 21%]
testing/test_multi.py ..s.xX                                                                                                    [ 21%]
testing/test_termination.py ...xx                                                                                               [ 22%]
testing/test_threadpool.py ......x.......                                                                                       [ 23%]
testing/test_basics.py ...........                                                                                              [ 24%]
testing/test_channel.py ..s...s...s...s...s...s...s...s...s...s...s...s...s...s...s...s...s...s...s.FFsF..s...s...s...s...s...s [ 34%]
...s...s...s...s.                                                                                                               [ 35%]
testing/test_gateway.py ..s...s...s...s...s...s.XXsX..s...s...s...s...s...s...s...s...s...s...s...s...s....ss..                 [ 43%]
testing/test_multi.py ..s.xX                                                                                                    [ 44%]
testing/test_termination.py ...xx                                                                                               [ 44%]
testing/test_threadpool.py ......x.......                                                                                       [ 45%]
testing/test_basics.py sssssssssss                                                                                              [ 46%]
testing/test_channel.py sssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss [ 56%]
sssssssssssssssss                                                                                                               [ 57%]
testing/test_gateway.py sssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss                 [ 65%]
testing/test_multi.py ssssss                                                                                                    [ 66%]
testing/test_termination.py sssss                                                                                               [ 66%]
testing/test_threadpool.py ssssssssssssss                                                                                       [ 68%]
testing/test_basics.py sssssssssss                                                                                              [ 69%]
testing/test_channel.py sssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss [ 78%]
sssssssssssssssss                                                                                                               [ 80%]
testing/test_gateway.py sssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss                 [ 87%]
testing/test_multi.py ssssss                                                                                                    [ 88%]
testing/test_termination.py sssss                                                                                               [ 88%]
testing/test_threadpool.py ssssssssssssss                                                                                       [ 90%]
testing/test_basics.py ...................                                                                                      [ 91%]
testing/test_compatibility_regressions.py .                                                                                     [ 92%]
testing/test_gateway.py ........X.X.....ss                                                                                      [ 93%]
testing/test_multi.py ..............                                                                                            [ 94%]
testing/test_rsync.py ...........                                                                                               [ 95%]
testing/test_serializer.py ................                                                                                     [ 97%]
testing/test_termination.py ...                                                                                                 [ 97%]
testing/test_xspec.py ...............X....ssss.                                                                                 [100%]

============================================================== FAILURES ===============================================================
_____________________________ TestChannelBasicBehaviour.test_channel_callback_remote_freed[thread-popen] ______________________________

self = <test_channel.TestChannelBasicBehaviour object at 0x5d33e685f60>
gw = <Gateway id='popen' receive-live, thread model, 1 active channels>

    @needs_early_gc
    def test_channel_callback_remote_freed(self, gw: Gateway) -> None:
        channel = self.check_channel_callback_stays_active(gw, earlyfree=False)
        assert channel is not None
        # freed automatically at the end of producer()
>       channel.waitclose(TESTTIMEOUT)

testing/test_channel.py:255: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <Channel id=49 open>, timeout = 10.0

    def waitclose(self, timeout: float | None = None) -> None:
        """Wait until this channel is closed (or the remote side
        otherwise signalled that no more data was being sent).
    
        The channel may still hold receiveable items, but not receive
        any more after waitclose() has returned.
    
        Exceptions from executing code on the other side are reraised as local
        channel.RemoteErrors.
    
        EOFError is raised if the reading-connection was prematurely closed,
        which often indicates a dying process.
    
        self.TimeoutError is raised after the specified number of seconds
        (default is None, i.e. wait indefinitely).
        """
        # wait for non-"opened" state
        self._receiveclosed.wait(timeout=timeout)
        if not self._receiveclosed.is_set():
>           raise self.TimeoutError("Timeout after %r seconds" % timeout)
E           execnet.gateway_base.TimeoutError: Timeout after 10.0 seconds

src/execnet/gateway_base.py:896: TimeoutError
-------------------------------------------------------- Captured stdout call ---------------------------------------------------------
99
98
97
96
95
94
93
92
91
90
89
88
87
86
85
84
83
82
81
_____________________________ TestChannelBasicBehaviour.test_channel_callback_remote_freed[thread-socket] _____________________________

self = <test_channel.TestChannelBasicBehaviour object at 0x5d33e685fb0>
gw = <Gateway id='socket' receive-live, thread model, 1 active channels>

    @needs_early_gc
    def test_channel_callback_remote_freed(self, gw: Gateway) -> None:
        channel = self.check_channel_callback_stays_active(gw, earlyfree=False)
        assert channel is not None
        # freed automatically at the end of producer()
>       channel.waitclose(TESTTIMEOUT)

testing/test_channel.py:255: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <Channel id=49 open>, timeout = 10.0

    def waitclose(self, timeout: float | None = None) -> None:
        """Wait until this channel is closed (or the remote side
        otherwise signalled that no more data was being sent).
    
        The channel may still hold receiveable items, but not receive
        any more after waitclose() has returned.
    
        Exceptions from executing code on the other side are reraised as local
        channel.RemoteErrors.
    
        EOFError is raised if the reading-connection was prematurely closed,
        which often indicates a dying process.
    
        self.TimeoutError is raised after the specified number of seconds
        (default is None, i.e. wait indefinitely).
        """
        # wait for non-"opened" state
        self._receiveclosed.wait(timeout=timeout)
        if not self._receiveclosed.is_set():
>           raise self.TimeoutError("Timeout after %r seconds" % timeout)
E           execnet.gateway_base.TimeoutError: Timeout after 10.0 seconds

src/execnet/gateway_base.py:896: TimeoutError
-------------------------------------------------------- Captured stdout call ---------------------------------------------------------
99
98
97
96
95
94
93
92
91
90
89
88
87
86
85
84
83
82
81
_____________________________ TestChannelBasicBehaviour.test_channel_callback_remote_freed[thread-proxy] ______________________________

self = <test_channel.TestChannelBasicBehaviour object at 0x5d33e686050>
gw = <Gateway id='proxy' receive-live, thread model, 1 active channels>

    @needs_early_gc
    def test_channel_callback_remote_freed(self, gw: Gateway) -> None:
        channel = self.check_channel_callback_stays_active(gw, earlyfree=False)
        assert channel is not None
        # freed automatically at the end of producer()
>       channel.waitclose(TESTTIMEOUT)

testing/test_channel.py:255: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <Channel id=49 open>, timeout = 10.0

    def waitclose(self, timeout: float | None = None) -> None:
        """Wait until this channel is closed (or the remote side
        otherwise signalled that no more data was being sent).
    
        The channel may still hold receiveable items, but not receive
        any more after waitclose() has returned.
    
        Exceptions from executing code on the other side are reraised as local
        channel.RemoteErrors.
    
        EOFError is raised if the reading-connection was prematurely closed,
        which often indicates a dying process.
    
        self.TimeoutError is raised after the specified number of seconds
        (default is None, i.e. wait indefinitely).
        """
        # wait for non-"opened" state
        self._receiveclosed.wait(timeout=timeout)
        if not self._receiveclosed.is_set():
>           raise self.TimeoutError("Timeout after %r seconds" % timeout)
E           execnet.gateway_base.TimeoutError: Timeout after 10.0 seconds

src/execnet/gateway_base.py:896: TimeoutError
-------------------------------------------------------- Captured stdout call ---------------------------------------------------------
99
98
97
96
95
94
93
92
91
90
89
88
87
86
85
84
83
82
81
________________________ TestChannelBasicBehaviour.test_channel_callback_remote_freed[main_thread_only-popen] _________________________

self = <test_channel.TestChannelBasicBehaviour object at 0x5d33e6860a0>
gw = <Gateway id='popen' receive-live, thread model, 1 active channels>

    @needs_early_gc
    def test_channel_callback_remote_freed(self, gw: Gateway) -> None:
        channel = self.check_channel_callback_stays_active(gw, earlyfree=False)
        assert channel is not None
        # freed automatically at the end of producer()
>       channel.waitclose(TESTTIMEOUT)

testing/test_channel.py:255: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <Channel id=177 open>, timeout = 10.0

    def waitclose(self, timeout: float | None = None) -> None:
        """Wait until this channel is closed (or the remote side
        otherwise signalled that no more data was being sent).
    
        The channel may still hold receiveable items, but not receive
        any more after waitclose() has returned.
    
        Exceptions from executing code on the other side are reraised as local
        channel.RemoteErrors.
    
        EOFError is raised if the reading-connection was prematurely closed,
        which often indicates a dying process.
    
        self.TimeoutError is raised after the specified number of seconds
        (default is None, i.e. wait indefinitely).
        """
        # wait for non-"opened" state
        self._receiveclosed.wait(timeout=timeout)
        if not self._receiveclosed.is_set():
>           raise self.TimeoutError("Timeout after %r seconds" % timeout)
E           execnet.gateway_base.TimeoutError: Timeout after 10.0 seconds

src/execnet/gateway_base.py:896: TimeoutError
-------------------------------------------------------- Captured stdout call ---------------------------------------------------------
99
98
97
96
95
94
93
92
91
90
89
88
87
86
85
84
83
82
81
________________________ TestChannelBasicBehaviour.test_channel_callback_remote_freed[main_thread_only-socket] ________________________

self = <test_channel.TestChannelBasicBehaviour object at 0x5d33e6860f0>
gw = <Gateway id='socket' receive-live, thread model, 1 active channels>

    @needs_early_gc
    def test_channel_callback_remote_freed(self, gw: Gateway) -> None:
        channel = self.check_channel_callback_stays_active(gw, earlyfree=False)
        assert channel is not None
        # freed automatically at the end of producer()
>       channel.waitclose(TESTTIMEOUT)

testing/test_channel.py:255: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <Channel id=173 open>, timeout = 10.0

    def waitclose(self, timeout: float | None = None) -> None:
        """Wait until this channel is closed (or the remote side
        otherwise signalled that no more data was being sent).
    
        The channel may still hold receiveable items, but not receive
        any more after waitclose() has returned.
    
        Exceptions from executing code on the other side are reraised as local
        channel.RemoteErrors.
    
        EOFError is raised if the reading-connection was prematurely closed,
        which often indicates a dying process.
    
        self.TimeoutError is raised after the specified number of seconds
        (default is None, i.e. wait indefinitely).
        """
        # wait for non-"opened" state
        self._receiveclosed.wait(timeout=timeout)
        if not self._receiveclosed.is_set():
>           raise self.TimeoutError("Timeout after %r seconds" % timeout)
E           execnet.gateway_base.TimeoutError: Timeout after 10.0 seconds

src/execnet/gateway_base.py:896: TimeoutError
-------------------------------------------------------- Captured stdout call ---------------------------------------------------------
99
98
97
96
95
94
93
92
91
90
89
88
87
86
85
84
83
82
81
________________________ TestChannelBasicBehaviour.test_channel_callback_remote_freed[main_thread_only-proxy] _________________________

self = <test_channel.TestChannelBasicBehaviour object at 0x5d33e686190>
gw = <Gateway id='proxy' receive-live, thread model, 1 active channels>

    @needs_early_gc
    def test_channel_callback_remote_freed(self, gw: Gateway) -> None:
        channel = self.check_channel_callback_stays_active(gw, earlyfree=False)
        assert channel is not None
        # freed automatically at the end of producer()
>       channel.waitclose(TESTTIMEOUT)

testing/test_channel.py:255: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <Channel id=173 open>, timeout = 10.0

    def waitclose(self, timeout: float | None = None) -> None:
        """Wait until this channel is closed (or the remote side
        otherwise signalled that no more data was being sent).
    
        The channel may still hold receiveable items, but not receive
        any more after waitclose() has returned.
    
        Exceptions from executing code on the other side are reraised as local
        channel.RemoteErrors.
    
        EOFError is raised if the reading-connection was prematurely closed,
        which often indicates a dying process.
    
        self.TimeoutError is raised after the specified number of seconds
        (default is None, i.e. wait indefinitely).
        """
        # wait for non-"opened" state
        self._receiveclosed.wait(timeout=timeout)
        if not self._receiveclosed.is_set():
>           raise self.TimeoutError("Timeout after %r seconds" % timeout)
E           execnet.gateway_base.TimeoutError: Timeout after 10.0 seconds

src/execnet/gateway_base.py:896: TimeoutError
-------------------------------------------------------- Captured stdout call ---------------------------------------------------------
99
98
97
96
95
94
93
92
91
90
89
88
87
86
85
84
83
82
81
=============================================================== XPASSES ===============================================================
________________________________________________ TestTracing.test_popen_stderr_tracing ________________________________________________
-------------------------------------------------------- Captured stderr call ---------------------------------------------------------
[443074] gw0-worker [receiver-thread] received <Message GATEWAY_TERMINATE channel=0 lendata=0>
[443074] gw0-worker [receiver-thread] finishing receiving thread
[443074] gw0-worker [receiver-thread] terminating execution
[443074] gw0-worker shutting down execution pool
[443074] gw0-worker [receiver-thread] closing read
[443074] gw0-worker [serve] joining receiver thread
[443074] gw0-worker 1 channel.__del__
[443074] gw0-worker waiting for receiver thread to finish
[443074] gw0-worker [receiver-thread] closing write
[443074] gw0-worker [receiver-thread] terminating our receive pseudo pool
[443074] === atexit cleanup <Group []> ===
======================================================= short test summary info =======================================================
SKIPPED [2] testing/test_channel.py:20: no 'gspecs' option found
SKIPPED [2] testing/test_channel.py:25: no 'gspecs' option found
SKIPPED [2] testing/test_channel.py:29: no 'gspecs' option found
SKIPPED [2] testing/test_channel.py:37: no 'gspecs' option found
SKIPPED [2] testing/test_channel.py:43: no 'gspecs' option found
SKIPPED [2] testing/test_channel.py:50: no 'gspecs' option found
SKIPPED [2] testing/test_channel.py:63: no 'gspecs' option found
SKIPPED [2] testing/test_channel.py:69: no 'gspecs' option found
SKIPPED [2] testing/test_channel.py:74: no 'gspecs' option found
SKIPPED [2] testing/test_channel.py:79: no 'gspecs' option found
SKIPPED [2] testing/test_channel.py:87: no 'gspecs' option found
SKIPPED [2] testing/test_channel.py:95: no 'gspecs' option found
SKIPPED [2] testing/test_channel.py:105: no 'gspecs' option found
SKIPPED [2] testing/test_channel.py:120: no 'gspecs' option found
SKIPPED [2] testing/test_channel.py:133: no 'gspecs' option found
SKIPPED [2] testing/test_channel.py:158: no 'gspecs' option found
SKIPPED [2] testing/test_channel.py:175: no 'gspecs' option found
SKIPPED [2] testing/test_channel.py:193: no 'gspecs' option found
SKIPPED [2] testing/test_channel.py:211: no 'gspecs' option found
SKIPPED [2] testing/test_channel.py:250: no 'gspecs' option found
SKIPPED [2] testing/test_channel.py:257: no 'gspecs' option found
SKIPPED [2] testing/test_channel.py:274: no 'gspecs' option found
SKIPPED [2] testing/test_channel.py:288: no 'gspecs' option found
SKIPPED [2] testing/test_channel.py:311: no 'gspecs' option found
SKIPPED [2] testing/test_channel.py:326: no 'gspecs' option found
SKIPPED [2] testing/test_channel.py:334: no 'gspecs' option found
SKIPPED [2] testing/test_channel.py:348: no 'gspecs' option found
SKIPPED [2] testing/test_channel.py:364: no 'gspecs' option found
SKIPPED [2] testing/test_channel.py:372: no 'gspecs' option found
SKIPPED [2] testing/test_channel.py:385: no 'gspecs' option found
SKIPPED [2] testing/test_gateway.py:36: no 'gspecs' option found
SKIPPED [2] testing/test_gateway.py:42: no 'gspecs' option found
SKIPPED [2] testing/test_gateway.py:45: no 'gspecs' option found
SKIPPED [2] testing/test_gateway.py:50: no 'gspecs' option found
SKIPPED [2] testing/test_gateway.py:54: no 'gspecs' option found
SKIPPED [2] testing/test_gateway.py:70: no 'gspecs' option found
SKIPPED [2] testing/test_gateway.py:79: no 'gspecs' option found
SKIPPED [2] testing/test_gateway.py:101: no 'gspecs' option found
SKIPPED [2] testing/test_gateway.py:114: no 'gspecs' option found
SKIPPED [2] testing/test_gateway.py:147: no 'gspecs' option found
SKIPPED [2] testing/test_gateway.py:187: no 'gspecs' option found
SKIPPED [2] testing/test_gateway.py:198: no 'gspecs' option found
SKIPPED [2] testing/test_gateway.py:202: no 'gspecs' option found
SKIPPED [2] testing/test_gateway.py:206: no 'gspecs' option found
SKIPPED [2] testing/test_gateway.py:210: no 'gspecs' option found
SKIPPED [2] testing/test_gateway.py:215: no 'gspecs' option found
SKIPPED [2] testing/test_gateway.py:221: no 'gspecs' option found
SKIPPED [2] testing/test_gateway.py:232: no 'gspecs' option found
SKIPPED [2] testing/test_gateway.py:249: no 'gspecs' option found
SKIPPED [2] testing/test_gateway.py:266: no 'gspecs' option found
SKIPPED [2] testing/test_gateway.py:399: no 'gspecs' option found
SKIPPED [2] testing/test_gateway.py:402: no 'gspecs' option found
SKIPPED [1] testing/test_gateway.py:572: can only run with main_thread_only
SKIPPED [1] testing/test_gateway.py:611: can only run with main_thread_only
SKIPPED [2] testing/test_multi.py:23: no 'gspecs' option found
SKIPPED [2] testing/test_basics.py:180: could not import 'eventlet': No module named 'eventlet'
SKIPPED [2] testing/test_basics.py:188: could not import 'eventlet': No module named 'eventlet'
SKIPPED [1] testing/test_basics.py:203: could not import 'eventlet': No module named 'eventlet'
SKIPPED [1] testing/test_basics.py:254: could not import 'eventlet': No module named 'eventlet'
SKIPPED [1] testing/test_basics.py:296: could not import 'eventlet': No module named 'eventlet'
SKIPPED [1] testing/test_basics.py:334: could not import 'eventlet': No module named 'eventlet'
SKIPPED [1] testing/test_basics.py:340: could not import 'eventlet': No module named 'eventlet'
SKIPPED [1] testing/test_basics.py:346: could not import 'eventlet': No module named 'eventlet'
SKIPPED [1] testing/test_basics.py:350: could not import 'eventlet': No module named 'eventlet'
SKIPPED [4] testing/test_channel.py:20: could not import 'eventlet': No module named 'eventlet'
SKIPPED [4] testing/test_channel.py:25: could not import 'eventlet': No module named 'eventlet'
SKIPPED [4] testing/test_channel.py:29: could not import 'eventlet': No module named 'eventlet'
SKIPPED [4] testing/test_channel.py:37: could not import 'eventlet': No module named 'eventlet'
SKIPPED [4] testing/test_channel.py:43: could not import 'eventlet': No module named 'eventlet'
SKIPPED [4] testing/test_channel.py:50: could not import 'eventlet': No module named 'eventlet'
SKIPPED [4] testing/test_channel.py:63: could not import 'eventlet': No module named 'eventlet'
SKIPPED [4] testing/test_channel.py:69: could not import 'eventlet': No module named 'eventlet'
SKIPPED [4] testing/test_channel.py:74: could not import 'eventlet': No module named 'eventlet'
SKIPPED [4] testing/test_channel.py:79: could not import 'eventlet': No module named 'eventlet'
SKIPPED [4] testing/test_channel.py:87: could not import 'eventlet': No module named 'eventlet'
SKIPPED [4] testing/test_channel.py:95: could not import 'eventlet': No module named 'eventlet'
SKIPPED [4] testing/test_channel.py:105: could not import 'eventlet': No module named 'eventlet'
SKIPPED [4] testing/test_channel.py:120: could not import 'eventlet': No module named 'eventlet'
SKIPPED [4] testing/test_channel.py:133: could not import 'eventlet': No module named 'eventlet'
SKIPPED [4] testing/test_channel.py:158: could not import 'eventlet': No module named 'eventlet'
SKIPPED [4] testing/test_channel.py:175: could not import 'eventlet': No module named 'eventlet'
SKIPPED [4] testing/test_channel.py:193: could not import 'eventlet': No module named 'eventlet'
SKIPPED [4] testing/test_channel.py:211: could not import 'eventlet': No module named 'eventlet'
SKIPPED [4] testing/test_channel.py:250: could not import 'eventlet': No module named 'eventlet'
SKIPPED [4] testing/test_channel.py:257: could not import 'eventlet': No module named 'eventlet'
SKIPPED [4] testing/test_channel.py:274: could not import 'eventlet': No module named 'eventlet'
SKIPPED [4] testing/test_channel.py:288: could not import 'eventlet': No module named 'eventlet'
SKIPPED [4] testing/test_channel.py:311: could not import 'eventlet': No module named 'eventlet'
SKIPPED [4] testing/test_channel.py:326: could not import 'eventlet': No module named 'eventlet'
SKIPPED [4] testing/test_channel.py:334: could not import 'eventlet': No module named 'eventlet'
SKIPPED [4] testing/test_channel.py:348: could not import 'eventlet': No module named 'eventlet'
SKIPPED [4] testing/test_channel.py:364: could not import 'eventlet': No module named 'eventlet'
SKIPPED [4] testing/test_channel.py:372: could not import 'eventlet': No module named 'eventlet'
SKIPPED [4] testing/test_channel.py:385: could not import 'eventlet': No module named 'eventlet'
SKIPPED [4] testing/test_gateway.py:36: could not import 'eventlet': No module named 'eventlet'
SKIPPED [4] testing/test_gateway.py:42: could not import 'eventlet': No module named 'eventlet'
SKIPPED [4] testing/test_gateway.py:45: could not import 'eventlet': No module named 'eventlet'
SKIPPED [4] testing/test_gateway.py:50: could not import 'eventlet': No module named 'eventlet'
SKIPPED [4] testing/test_gateway.py:54: could not import 'eventlet': No module named 'eventlet'
SKIPPED [4] testing/test_gateway.py:70: could not import 'eventlet': No module named 'eventlet'
SKIPPED [4] testing/test_gateway.py:79: could not import 'eventlet': No module named 'eventlet'
SKIPPED [4] testing/test_gateway.py:101: could not import 'eventlet': No module named 'eventlet'
SKIPPED [4] testing/test_gateway.py:114: could not import 'eventlet': No module named 'eventlet'
SKIPPED [4] testing/test_gateway.py:147: could not import 'eventlet': No module named 'eventlet'
SKIPPED [4] testing/test_gateway.py:187: could not import 'eventlet': No module named 'eventlet'
SKIPPED [4] testing/test_gateway.py:198: could not import 'eventlet': No module named 'eventlet'
SKIPPED [4] testing/test_gateway.py:202: could not import 'eventlet': No module named 'eventlet'
SKIPPED [4] testing/test_gateway.py:206: could not import 'eventlet': No module named 'eventlet'
SKIPPED [4] testing/test_gateway.py:210: could not import 'eventlet': No module named 'eventlet'
SKIPPED [4] testing/test_gateway.py:215: could not import 'eventlet': No module named 'eventlet'
SKIPPED [4] testing/test_gateway.py:221: could not import 'eventlet': No module named 'eventlet'
SKIPPED [4] testing/test_gateway.py:232: could not import 'eventlet': No module named 'eventlet'
SKIPPED [4] testing/test_gateway.py:249: could not import 'eventlet': No module named 'eventlet'
SKIPPED [4] testing/test_gateway.py:266: could not import 'eventlet': No module named 'eventlet'
SKIPPED [1] testing/test_gateway.py:304: could not import 'eventlet': No module named 'eventlet'
SKIPPED [1] testing/test_gateway.py:323: could not import 'eventlet': No module named 'eventlet'
SKIPPED [1] testing/test_gateway.py:351: could not import 'eventlet': No module named 'eventlet'
SKIPPED [1] testing/test_gateway.py:399: could not import 'eventlet': No module named 'eventlet'
SKIPPED [1] testing/test_gateway.py:402: could not import 'eventlet': No module named 'eventlet'
SKIPPED [1] testing/test_gateway.py:568: could not import 'eventlet': No module named 'eventlet'
SKIPPED [1] testing/test_gateway.py:607: could not import 'eventlet': No module named 'eventlet'
SKIPPED [4] testing/test_multi.py:23: could not import 'eventlet': No module named 'eventlet'
SKIPPED [1] testing/test_multi.py:235: could not import 'eventlet': No module named 'eventlet'
SKIPPED [1] testing/test_multi.py:259: could not import 'eventlet': No module named 'eventlet'
SKIPPED [2] testing/test_termination.py:25: could not import 'eventlet': No module named 'eventlet'
SKIPPED [1] testing/test_termination.py:45: could not import 'eventlet': No module named 'eventlet'
SKIPPED [2] testing/test_termination.py:112: could not import 'eventlet': No module named 'eventlet'
SKIPPED [1] testing/test_threadpool.py:10: could not import 'eventlet': No module named 'eventlet'
SKIPPED [1] testing/test_threadpool.py:20: could not import 'eventlet': No module named 'eventlet'
SKIPPED [1] testing/test_threadpool.py:26: could not import 'eventlet': No module named 'eventlet'
SKIPPED [1] testing/test_threadpool.py:31: could not import 'eventlet': No module named 'eventlet'
SKIPPED [1] testing/test_threadpool.py:50: could not import 'eventlet': No module named 'eventlet'
SKIPPED [1] testing/test_threadpool.py:65: could not import 'eventlet': No module named 'eventlet'
SKIPPED [1] testing/test_threadpool.py:75: could not import 'eventlet': No module named 'eventlet'
SKIPPED [1] testing/test_threadpool.py:103: could not import 'eventlet': No module named 'eventlet'
SKIPPED [1] testing/test_threadpool.py:112: could not import 'eventlet': No module named 'eventlet'
SKIPPED [1] testing/test_threadpool.py:122: could not import 'eventlet': No module named 'eventlet'
SKIPPED [1] testing/test_threadpool.py:133: could not import 'eventlet': No module named 'eventlet'
SKIPPED [1] testing/test_threadpool.py:146: could not import 'eventlet': No module named 'eventlet'
SKIPPED [1] testing/test_threadpool.py:171: could not import 'eventlet': No module named 'eventlet'
SKIPPED [1] testing/test_threadpool.py:195: could not import 'eventlet': No module named 'eventlet'
SKIPPED [2] testing/test_basics.py:180: could not import 'gevent': No module named 'gevent'
SKIPPED [2] testing/test_basics.py:188: could not import 'gevent': No module named 'gevent'
SKIPPED [1] testing/test_basics.py:203: could not import 'gevent': No module named 'gevent'
SKIPPED [1] testing/test_basics.py:254: could not import 'gevent': No module named 'gevent'
SKIPPED [1] testing/test_basics.py:296: could not import 'gevent': No module named 'gevent'
SKIPPED [1] testing/test_basics.py:334: could not import 'gevent': No module named 'gevent'
SKIPPED [1] testing/test_basics.py:340: could not import 'gevent': No module named 'gevent'
SKIPPED [1] testing/test_basics.py:346: could not import 'gevent': No module named 'gevent'
SKIPPED [1] testing/test_basics.py:350: could not import 'gevent': No module named 'gevent'
SKIPPED [4] testing/test_channel.py:20: could not import 'gevent': No module named 'gevent'
SKIPPED [4] testing/test_channel.py:25: could not import 'gevent': No module named 'gevent'
SKIPPED [4] testing/test_channel.py:29: could not import 'gevent': No module named 'gevent'
SKIPPED [4] testing/test_channel.py:37: could not import 'gevent': No module named 'gevent'
SKIPPED [4] testing/test_channel.py:43: could not import 'gevent': No module named 'gevent'
SKIPPED [4] testing/test_channel.py:50: could not import 'gevent': No module named 'gevent'
SKIPPED [4] testing/test_channel.py:63: could not import 'gevent': No module named 'gevent'
SKIPPED [4] testing/test_channel.py:69: could not import 'gevent': No module named 'gevent'
SKIPPED [4] testing/test_channel.py:74: could not import 'gevent': No module named 'gevent'
SKIPPED [4] testing/test_channel.py:79: could not import 'gevent': No module named 'gevent'
SKIPPED [4] testing/test_channel.py:87: could not import 'gevent': No module named 'gevent'
SKIPPED [4] testing/test_channel.py:95: could not import 'gevent': No module named 'gevent'
SKIPPED [4] testing/test_channel.py:105: could not import 'gevent': No module named 'gevent'
SKIPPED [4] testing/test_channel.py:120: could not import 'gevent': No module named 'gevent'
SKIPPED [4] testing/test_channel.py:133: could not import 'gevent': No module named 'gevent'
SKIPPED [4] testing/test_channel.py:158: could not import 'gevent': No module named 'gevent'
SKIPPED [4] testing/test_channel.py:175: could not import 'gevent': No module named 'gevent'
SKIPPED [4] testing/test_channel.py:193: could not import 'gevent': No module named 'gevent'
SKIPPED [4] testing/test_channel.py:211: could not import 'gevent': No module named 'gevent'
SKIPPED [4] testing/test_channel.py:250: could not import 'gevent': No module named 'gevent'
SKIPPED [4] testing/test_channel.py:257: could not import 'gevent': No module named 'gevent'
SKIPPED [4] testing/test_channel.py:274: could not import 'gevent': No module named 'gevent'
SKIPPED [4] testing/test_channel.py:288: could not import 'gevent': No module named 'gevent'
SKIPPED [4] testing/test_channel.py:311: could not import 'gevent': No module named 'gevent'
SKIPPED [4] testing/test_channel.py:326: could not import 'gevent': No module named 'gevent'
SKIPPED [4] testing/test_channel.py:334: could not import 'gevent': No module named 'gevent'
SKIPPED [4] testing/test_channel.py:348: could not import 'gevent': No module named 'gevent'
SKIPPED [4] testing/test_channel.py:364: could not import 'gevent': No module named 'gevent'
SKIPPED [4] testing/test_channel.py:372: could not import 'gevent': No module named 'gevent'
SKIPPED [4] testing/test_channel.py:385: could not import 'gevent': No module named 'gevent'
SKIPPED [4] testing/test_gateway.py:36: could not import 'gevent': No module named 'gevent'
SKIPPED [4] testing/test_gateway.py:42: could not import 'gevent': No module named 'gevent'
SKIPPED [4] testing/test_gateway.py:45: could not import 'gevent': No module named 'gevent'
SKIPPED [4] testing/test_gateway.py:50: could not import 'gevent': No module named 'gevent'
SKIPPED [4] testing/test_gateway.py:54: could not import 'gevent': No module named 'gevent'
SKIPPED [4] testing/test_gateway.py:70: could not import 'gevent': No module named 'gevent'
SKIPPED [4] testing/test_gateway.py:79: could not import 'gevent': No module named 'gevent'
SKIPPED [4] testing/test_gateway.py:101: could not import 'gevent': No module named 'gevent'
SKIPPED [4] testing/test_gateway.py:114: could not import 'gevent': No module named 'gevent'
SKIPPED [4] testing/test_gateway.py:147: could not import 'gevent': No module named 'gevent'
SKIPPED [4] testing/test_gateway.py:187: could not import 'gevent': No module named 'gevent'
SKIPPED [4] testing/test_gateway.py:198: could not import 'gevent': No module named 'gevent'
SKIPPED [4] testing/test_gateway.py:202: could not import 'gevent': No module named 'gevent'
SKIPPED [4] testing/test_gateway.py:206: could not import 'gevent': No module named 'gevent'
SKIPPED [4] testing/test_gateway.py:210: could not import 'gevent': No module named 'gevent'
SKIPPED [4] testing/test_gateway.py:215: could not import 'gevent': No module named 'gevent'
SKIPPED [4] testing/test_gateway.py:221: could not import 'gevent': No module named 'gevent'
SKIPPED [4] testing/test_gateway.py:232: could not import 'gevent': No module named 'gevent'
SKIPPED [4] testing/test_gateway.py:249: could not import 'gevent': No module named 'gevent'
SKIPPED [4] testing/test_gateway.py:266: could not import 'gevent': No module named 'gevent'
SKIPPED [1] testing/test_gateway.py:304: could not import 'gevent': No module named 'gevent'
SKIPPED [1] testing/test_gateway.py:323: could not import 'gevent': No module named 'gevent'
SKIPPED [1] testing/test_gateway.py:351: could not import 'gevent': No module named 'gevent'
SKIPPED [1] testing/test_gateway.py:399: could not import 'gevent': No module named 'gevent'
SKIPPED [1] testing/test_gateway.py:402: could not import 'gevent': No module named 'gevent'
SKIPPED [1] testing/test_gateway.py:568: could not import 'gevent': No module named 'gevent'
SKIPPED [1] testing/test_gateway.py:607: could not import 'gevent': No module named 'gevent'
SKIPPED [4] testing/test_multi.py:23: could not import 'gevent': No module named 'gevent'
SKIPPED [1] testing/test_multi.py:235: could not import 'gevent': No module named 'gevent'
SKIPPED [1] testing/test_multi.py:259: could not import 'gevent': No module named 'gevent'
SKIPPED [2] testing/test_termination.py:25: could not import 'gevent': No module named 'gevent'
SKIPPED [1] testing/test_termination.py:45: could not import 'gevent': No module named 'gevent'
SKIPPED [2] testing/test_termination.py:112: could not import 'gevent': No module named 'gevent'
SKIPPED [1] testing/test_threadpool.py:10: could not import 'gevent': No module named 'gevent'
SKIPPED [1] testing/test_threadpool.py:20: could not import 'gevent': No module named 'gevent'
SKIPPED [1] testing/test_threadpool.py:26: could not import 'gevent': No module named 'gevent'
SKIPPED [1] testing/test_threadpool.py:31: could not import 'gevent': No module named 'gevent'
SKIPPED [1] testing/test_threadpool.py:50: could not import 'gevent': No module named 'gevent'
SKIPPED [1] testing/test_threadpool.py:65: could not import 'gevent': No module named 'gevent'
SKIPPED [1] testing/test_threadpool.py:75: could not import 'gevent': No module named 'gevent'
SKIPPED [1] testing/test_threadpool.py:103: could not import 'gevent': No module named 'gevent'
SKIPPED [1] testing/test_threadpool.py:112: could not import 'gevent': No module named 'gevent'
SKIPPED [1] testing/test_threadpool.py:122: could not import 'gevent': No module named 'gevent'
SKIPPED [1] testing/test_threadpool.py:133: could not import 'gevent': No module named 'gevent'
SKIPPED [1] testing/test_threadpool.py:146: could not import 'gevent': No module named 'gevent'
SKIPPED [1] testing/test_threadpool.py:171: could not import 'gevent': No module named 'gevent'
SKIPPED [1] testing/test_threadpool.py:195: could not import 'gevent': No module named 'gevent'
SKIPPED [2] testing/test_gateway.py:554: could not import 'gevent': No module named 'gevent'
SKIPPED [1] testing/test_xspec.py:199: no 'gspecs' option found
SKIPPED [1] testing/test_xspec.py:207: Vagrant binary not in PATH
SKIPPED [1] testing/test_xspec.py:228: no 'gspecs' option found
SKIPPED [1] testing/test_xspec.py:239: no 'gspecs' option found
XFAIL testing/test_multi.py::test_safe_terminate[thread] - active_count() has been broken for some time
XFAIL testing/test_termination.py::test_terminate_implicit_does_trykill[thread-sys.executable] - reason: since python3.12 this test triggers RuntimeError: can't create new thread at interpreter shutdown
XFAIL testing/test_termination.py::test_terminate_implicit_does_trykill[thread-pypy3] - reason: since python3.12 this test triggers RuntimeError: can't create new thread at interpreter shutdown
XFAIL testing/test_threadpool.py::test_limited_size[thread] - WorkerPool does not implement limited size
XFAIL testing/test_multi.py::test_safe_terminate[main_thread_only] - active_count() has been broken for some time
XFAIL testing/test_termination.py::test_terminate_implicit_does_trykill[main_thread_only-sys.executable] - reason: since python3.12 this test triggers RuntimeError: can't create new thread at interpreter shutdown
XFAIL testing/test_termination.py::test_terminate_implicit_does_trykill[main_thread_only-pypy3] - reason: since python3.12 this test triggers RuntimeError: can't create new thread at interpreter shutdown
XFAIL testing/test_threadpool.py::test_limited_size[main_thread_only] - WorkerPool does not implement limited size
XPASS testing/test_gateway.py::TestBasicGateway::test_gateway_status_busy[thread-popen] - on some systems this test fails due to timing problems
XPASS testing/test_gateway.py::TestBasicGateway::test_gateway_status_busy[thread-socket] - on some systems this test fails due to timing problems
XPASS testing/test_gateway.py::TestBasicGateway::test_gateway_status_busy[thread-proxy] - on some systems this test fails due to timing problems
XPASS testing/test_multi.py::test_safe_terminate2[thread] - active_count() has been broken for some time
XPASS testing/test_gateway.py::TestBasicGateway::test_gateway_status_busy[main_thread_only-popen] - on some systems this test fails due to timing problems
XPASS testing/test_gateway.py::TestBasicGateway::test_gateway_status_busy[main_thread_only-socket] - on some systems this test fails due to timing problems
XPASS testing/test_gateway.py::TestBasicGateway::test_gateway_status_busy[main_thread_only-proxy] - on some systems this test fails due to timing problems
XPASS testing/test_multi.py::test_safe_terminate2[main_thread_only] - active_count() has been broken for some time
XPASS testing/test_gateway.py::TestThreads::test_status_with_threads - on some systems this test fails due to timing problems
XPASS testing/test_gateway.py::TestTracing::test_popen_stderr_tracing - on some systems this test fails due to timing problems
XPASS testing/test_xspec.py::TestMakegateway::test_popen_nice - fails due to timing problems on busy single-core VMs
FAILED testing/test_channel.py::TestChannelBasicBehaviour::test_channel_callback_remote_freed[thread-popen] - execnet.gateway_base.TimeoutError: Timeout after 10.0 seconds
FAILED testing/test_channel.py::TestChannelBasicBehaviour::test_channel_callback_remote_freed[thread-socket] - execnet.gateway_base.TimeoutError: Timeout after 10.0 seconds
FAILED testing/test_channel.py::TestChannelBasicBehaviour::test_channel_callback_remote_freed[thread-proxy] - execnet.gateway_base.TimeoutError: Timeout after 10.0 seconds
FAILED testing/test_channel.py::TestChannelBasicBehaviour::test_channel_callback_remote_freed[main_thread_only-popen] - execnet.gateway_base.TimeoutError: Timeout after 10.0 seconds
FAILED testing/test_channel.py::TestChannelBasicBehaviour::test_channel_callback_remote_freed[main_thread_only-socket] - execnet.gateway_base.TimeoutError: Timeout after 10.0 seconds
FAILED testing/test_channel.py::TestChannelBasicBehaviour::test_channel_callback_remote_freed[main_thread_only-proxy] - execnet.gateway_base.TimeoutError: Timeout after 10.0 seconds
============================ 6 failed, 470 passed, 600 skipped, 8 xfailed, 11 xpassed in 105.58s (0:01:45) ============================

I've tried increasing the test timeout to 60 seconds (and disabling pytest-timeout), and this did not change the result. I've tested on 8e9da51. GIL-enabled interpreter passes these tests on this system.

@RonnyPfannschmidt
Copy link
Member

We haven't done any research on how lack of gil affects the internal communication primitives for excecnet

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants