
This issue trackerhas been migrated toGitHub, and is currentlyread-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.
Created on2018-01-25 06:44 byyselivanov, last changed2022-04-11 14:58 byadmin. This issue is nowclosed.
| Pull Requests | |||
|---|---|---|---|
| URL | Status | Linked | Edit |
| PR 5312 | merged | yselivanov,2018-01-25 06:47 | |
| PR 5338 | merged | yselivanov,2018-01-26 05:38 | |
| Messages (7) | |||
|---|---|---|---|
| msg310657 -(view) | Author: Yury Selivanov (yselivanov)*![]() | Date: 2018-01-25 06:44 | |
As discussed, we want to make Server objects more usable in async/await code and more compatible with asyncio.run.This is also needed to handle a use case when two or more servers are created and need to start listening at the same time.We propose to:1. Add a new bool flag defaulting to True to loop.create_server and loop.create_unix_server: start_serving. By default, loop will return a server that is already accepting connections. When start_serving is set to False, create_server and create_unix_server will return a server that will not listen on its sockets.2. A new idempotent Server.start_serving() method can be used to make server listen on its sockets (useful when a server object was created with start_serving=False).3. A new Server.serve_forever() method that calls start_serving() and blocks forever, until cancelled. When cancelled, it closes its server object.4. A new Server.is_serving() method. This is useful to introspect a server object in unittests.5. Server objects should be async context managers. Server.__aexit__ should close the server and await on Server.wait_closed().With these new APIs, the following pattern becomes possible: async def main(): srv = await asyncio.start_server(...) async with srv: await srv.serve_forever() asyncio.run(main()) | |||
| msg310717 -(view) | Author: Yury Selivanov (yselivanov)*![]() | Date: 2018-01-25 23:08 | |
New changesetc9070d03f5169ad6e171e641b7fa8feab18bf229 by Yury Selivanov in branch 'master':bpo-32662: Implement Server.start_serving() and Server.serve_forever() (#5312)https://github.com/python/cpython/commit/c9070d03f5169ad6e171e641b7fa8feab18bf229 | |||
| msg310740 -(view) | Author: Yury Selivanov (yselivanov)*![]() | Date: 2018-01-26 06:31 | |
New changeset4112c5b97d9c1c7b034653d0e017ffa894a45c74 by Yury Selivanov in branch 'master':bpo-32662: Try making test_asyncio.test_server more reliable (#5338)https://github.com/python/cpython/commit/4112c5b97d9c1c7b034653d0e017ffa894a45c74 | |||
| msg310748 -(view) | Author: STINNER Victor (vstinner)*![]() | Date: 2018-01-26 09:56 | |
test_asyncio.test_start_server_1() hangs on "s390x Debian 3.x" buildbot:http://buildbot.python.org/all/#builders/13/builds/579test_set_nodelay (test.test_asyncio.test_selector_events.TestSelectorUtils) ... oktest_start_server_1 (test.test_asyncio.test_server.ProactorStartServerTests) ... skipped 'Windows only'Exception in thread test-client:Traceback (most recent call last): File "/home/dje/cpython-buildarea/3.x.edelsohn-debian-z/build/Lib/test/test_asyncio/functional.py", line 193, in run self._prog(TestSocketWrapper(self._sock)) File "/home/dje/cpython-buildarea/3.x.edelsohn-debian-z/build/Lib/test/test_asyncio/test_server.py", line 44, in <lambda> with self.tcp_client(lambda sock: client(sock, addr)): File "/home/dje/cpython-buildarea/3.x.edelsohn-debian-z/build/Lib/test/test_asyncio/test_server.py", line 19, in client sock.connect(addr)ConnectionRefusedError: [Errno 111] Connection refusedDuring handling of the above exception, another exception occurred:Traceback (most recent call last): File "/home/dje/cpython-buildarea/3.x.edelsohn-debian-z/build/Lib/threading.py", line 917, in _bootstrap_inner self.run() File "/home/dje/cpython-buildarea/3.x.edelsohn-debian-z/build/Lib/test/test_asyncio/functional.py", line 195, in run self._test._abort_socket_test(ex) File "/home/dje/cpython-buildarea/3.x.edelsohn-debian-z/build/Lib/test/test_asyncio/functional.py", line 122, in _abort_socket_test self.fail(ex) File "/home/dje/cpython-buildarea/3.x.edelsohn-debian-z/build/Lib/unittest/case.py", line 680, in fail raise self.failureException(msg)AssertionError: [Errno 111] Connection refusedTimeout (0:15:00)!Thread 0x000003fffcdcd710 (most recent call first): File "/home/dje/cpython-buildarea/3.x.edelsohn-debian-z/build/Lib/selectors.py", line 468 in select File "/home/dje/cpython-buildarea/3.x.edelsohn-debian-z/build/Lib/asyncio/base_events.py", line 1555 in _run_once File "/home/dje/cpython-buildarea/3.x.edelsohn-debian-z/build/Lib/asyncio/base_events.py", line 450 in run_forever File "/home/dje/cpython-buildarea/3.x.edelsohn-debian-z/build/Lib/asyncio/base_events.py", line 482 in run_until_complete File "/home/dje/cpython-buildarea/3.x.edelsohn-debian-z/build/Lib/test/test_asyncio/test_server.py", line 45 in test_start_server_1 File "/home/dje/cpython-buildarea/3.x.edelsohn-debian-z/build/Lib/unittest/case.py", line 615 in run File "/home/dje/cpython-buildarea/3.x.edelsohn-debian-z/build/Lib/unittest/case.py", line 663 in __call__ File "/home/dje/cpython-buildarea/3.x.edelsohn-debian-z/build/Lib/unittest/suite.py", line 122 in run File "/home/dje/cpython-buildarea/3.x.edelsohn-debian-z/build/Lib/unittest/suite.py", line 84 in __call__ File "/home/dje/cpython-buildarea/3.x.edelsohn-debian-z/build/Lib/unittest/suite.py", line 122 in run File "/home/dje/cpython-buildarea/3.x.edelsohn-debian-z/build/Lib/unittest/suite.py", line 84 in __call__ File "/home/dje/cpython-buildarea/3.x.edelsohn-debian-z/build/Lib/unittest/suite.py", line 122 in run File "/home/dje/cpython-buildarea/3.x.edelsohn-debian-z/build/Lib/unittest/suite.py", line 84 in __call__ File "/home/dje/cpython-buildarea/3.x.edelsohn-debian-z/build/Lib/unittest/suite.py", line 122 in run File "/home/dje/cpython-buildarea/3.x.edelsohn-debian-z/build/Lib/unittest/suite.py", line 84 in __call__ File "/home/dje/cpython-buildarea/3.x.edelsohn-debian-z/build/Lib/unittest/suite.py", line 122 in run File "/home/dje/cpython-buildarea/3.x.edelsohn-debian-z/build/Lib/unittest/suite.py", line 84 in __call__ File "/home/dje/cpython-buildarea/3.x.edelsohn-debian-z/build/Lib/unittest/runner.py", line 176 in run File "/home/dje/cpython-buildarea/3.x.edelsohn-debian-z/build/Lib/test/support/__init__.py", line 1861 in _run_suite File "/home/dje/cpython-buildarea/3.x.edelsohn-debian-z/build/Lib/test/support/__init__.py", line 1951 in run_unittest File "/home/dje/cpython-buildarea/3.x.edelsohn-debian-z/build/Lib/test/libregrtest/runtest.py", line 175 in test_runner File "/home/dje/cpython-buildarea/3.x.edelsohn-debian-z/build/Lib/test/libregrtest/runtest.py", line 176 in runtest_inner File "/home/dje/cpython-buildarea/3.x.edelsohn-debian-z/build/Lib/test/libregrtest/runtest.py", line 140 in runtest File "/home/dje/cpython-buildarea/3.x.edelsohn-debian-z/build/Lib/test/libregrtest/main.py", line 291 in rerun_failed_tests File "/home/dje/cpython-buildarea/3.x.edelsohn-debian-z/build/Lib/test/libregrtest/main.py", line 540 in _main File "/home/dje/cpython-buildarea/3.x.edelsohn-debian-z/build/Lib/test/libregrtest/main.py", line 510 in main File "/home/dje/cpython-buildarea/3.x.edelsohn-debian-z/build/Lib/test/libregrtest/main.py", line 585 in main File "/home/dje/cpython-buildarea/3.x.edelsohn-debian-z/build/Lib/test/__main__.py", line 2 in <module> File "/home/dje/cpython-buildarea/3.x.edelsohn-debian-z/build/Lib/runpy.py", line 85 in _run_code File "/home/dje/cpython-buildarea/3.x.edelsohn-debian-z/build/Lib/runpy.py", line 193 in _run_module_as_maintest_start_server_1 (test.test_asyncio.test_server.SelectorStartServerTests) ... Makefile:1090: recipe for target 'buildbottest' failedmake: *** [buildbottest] Error 1program finished with exit code 2elapsedTime=2050.270461 | |||
| msg310749 -(view) | Author: STINNER Victor (vstinner)*![]() | Date: 2018-01-26 09:58 | |
The test fails differently on s390x SLES 3.x:http://buildbot.python.org/all/#/builders/16/builds/576...test_force_close (test.test_asyncio.test_selector_events.SelectorTransportTests) ... oktest_set_nodelay (test.test_asyncio.test_selector_events.TestSelectorUtils) ... oktest_start_server_1 (test.test_asyncio.test_server.ProactorStartServerTests) ... skipped 'Windows only'test_start_server_1 (test.test_asyncio.test_server.SelectorStartServerTests) ... Exception in thread test-client:Traceback (most recent call last): File "/home/dje/cpython-buildarea/3.x.edelsohn-sles-z/build/Lib/test/test_asyncio/functional.py", line 193, in run self._prog(TestSocketWrapper(self._sock)) File "/home/dje/cpython-buildarea/3.x.edelsohn-sles-z/build/Lib/test/test_asyncio/test_server.py", line 44, in <lambda> with self.tcp_client(lambda sock: client(sock, addr)): File "/home/dje/cpython-buildarea/3.x.edelsohn-sles-z/build/Lib/test/test_asyncio/test_server.py", line 19, in client sock.connect(addr)ConnectionRefusedError: [Errno 111] Connection refusedDuring handling of the above exception, another exception occurred:Traceback (most recent call last): File "/home/dje/cpython-buildarea/3.x.edelsohn-sles-z/build/Lib/threading.py", line 917, in _bootstrap_inner self.run() File "/home/dje/cpython-buildarea/3.x.edelsohn-sles-z/build/Lib/test/test_asyncio/functional.py", line 195, in run self._test._abort_socket_test(ex) File "/home/dje/cpython-buildarea/3.x.edelsohn-sles-z/build/Lib/test/test_asyncio/functional.py", line 122, in _abort_socket_test self.fail(ex) File "/home/dje/cpython-buildarea/3.x.edelsohn-sles-z/build/Lib/unittest/case.py", line 680, in fail raise self.failureException(msg)AssertionError: [Errno 111] Connection refused/home/dje/cpython-buildarea/3.x.edelsohn-sles-z/build/Lib/test/test_asyncio/test_server.py:45: ResourceWarning: unclosed <socket.socket fd=8, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 56340)> self.loop.run_until_complete(main_task)ERRORtest_start_unix_server_1 (test.test_asyncio.test_server.SelectorStartServerTests) ... oktest_start_tls_client_1 (test.test_asyncio.test_sslproto.ProactorStartTLSTests) ... skipped 'Windows only'test_start_tls_server_1 (test.test_asyncio.test_sslproto.ProactorStartTLSTests) ... skipped 'Windows only'test_start_tls_wrong_args (test.test_asyncio.test_sslproto.ProactorStartTLSTests) ... skipped 'Windows only'test_start_tls_client_1 (test.test_asyncio.test_sslproto.SelectorStartTLSTests) ... /home/dje/cpython-buildarea/3.x.edelsohn-sles-z/build/Lib/collections/__init__.py:404: ResourceWarning: unclosed <socket.socket fd=7, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=6, laddr=('127.0.0.1', 42302)> result = _self._make(map(kwds.pop, field_names, _self))Unhandled error in exception handlercontext: {'message': 'Task was destroyed but it is pending!', 'task': <Task pending coro=<BaseStartServer.test_start_server_1.<locals>.main() done, defined at /home/dje/cpython-buildarea/3.x.edelsohn-sles-z/build/Lib/test/test_asyncio/test_server.py:31> wait_for=<Future pending cb=[<TaskWakeupMethWrapper object at 0x3fff979bbf8>()]>>}Traceback (most recent call last): File "/home/dje/cpython-buildarea/3.x.edelsohn-sles-z/build/Lib/asyncio/base_events.py", line 1459, in call_exception_handler self._exception_handler(self, context) File "/home/dje/cpython-buildarea/3.x.edelsohn-sles-z/build/Lib/test/test_asyncio/functional.py", line 22, in loop_exception_handler self.loop.default_exception_handler(context)AttributeError: 'NoneType' object has no attribute 'default_exception_handler'oktest_start_tls_server_1 (test.test_asyncio.test_sslproto.SelectorStartTLSTests) ... oktest_start_tls_wrong_args (test.test_asyncio.test_sslproto.SelectorStartTLSTests) ... oktest_cancel_handshake (test.test_asyncio.test_sslproto.SslProtoHandshakeTests) ... oktest_close_during_handshake (test.test_asyncio.test_sslproto.SslProtoHandshakeTests) ....======================================================================ERROR: test_start_server_1 (test.test_asyncio.test_server.SelectorStartServerTests)----------------------------------------------------------------------Traceback (most recent call last): File "/home/dje/cpython-buildarea/3.x.edelsohn-sles-z/build/Lib/test/test_asyncio/test_server.py", line 45, in test_start_server_1 self.loop.run_until_complete(main_task) File "/home/dje/cpython-buildarea/3.x.edelsohn-sles-z/build/Lib/asyncio/base_events.py", line 493, in run_until_complete raise RuntimeError('Event loop stopped before Future completed.')RuntimeError: Event loop stopped before Future completed.---------------------------------------------------------------------- | |||
| msg310750 -(view) | Author: STINNER Victor (vstinner)*![]() | Date: 2018-01-26 10:00 | |
Just to be complete, the test also fails on x86 Gentoo Non-Debug with X 3.x:http://buildbot.python.org/all/#/builders/99/builds/564...test_start_server_1 (test.test_asyncio.test_server.SelectorStartServerTests) ... Exception in thread test-client:Traceback (most recent call last): File "/buildbot/buildarea/3.x.ware-gentoo-x86.nondebug/build/Lib/test/test_asyncio/functional.py", line 193, in run self._prog(TestSocketWrapper(self._sock)) File "/buildbot/buildarea/3.x.ware-gentoo-x86.nondebug/build/Lib/test/test_asyncio/test_server.py", line 44, in <lambda> with self.tcp_client(lambda sock: client(sock, addr)): File "/buildbot/buildarea/3.x.ware-gentoo-x86.nondebug/build/Lib/test/test_asyncio/test_server.py", line 19, in client sock.connect(addr)ConnectionRefusedError: [Errno 111] Connection refusedDuring handling of the above exception, another exception occurred:Traceback (most recent call last): File "/buildbot/buildarea/3.x.ware-gentoo-x86.nondebug/build/Lib/threading.py", line 917, in _bootstrap_inner self.run() File "/buildbot/buildarea/3.x.ware-gentoo-x86.nondebug/build/Lib/test/test_asyncio/functional.py", line 195, in run self._test._abort_socket_test(ex) File "/buildbot/buildarea/3.x.ware-gentoo-x86.nondebug/build/Lib/test/test_asyncio/functional.py", line 122, in _abort_socket_test self.fail(ex) File "/buildbot/buildarea/3.x.ware-gentoo-x86.nondebug/build/Lib/unittest/case.py", line 680, in fail raise self.failureException(msg)AssertionError: [Errno 111] Connection refusedTimeout (0:15:00)!Thread 0xb7d69700 (most recent call first): File "/buildbot/buildarea/3.x.ware-gentoo-x86.nondebug/build/Lib/selectors.py", line 468 in select File "/buildbot/buildarea/3.x.ware-gentoo-x86.nondebug/build/Lib/asyncio/base_events.py", line 1555 in _run_once File "/buildbot/buildarea/3.x.ware-gentoo-x86.nondebug/build/Lib/asyncio/base_events.py", line 450 in run_forever File "/buildbot/buildarea/3.x.ware-gentoo-x86.nondebug/build/Lib/asyncio/base_events.py", line 482 in run_until_complete File "/buildbot/buildarea/3.x.ware-gentoo-x86.nondebug/build/Lib/test/test_asyncio/test_server.py", line 45 in test_start_server_1... | |||
| msg310786 -(view) | Author: Yury Selivanov (yselivanov)*![]() | Date: 2018-01-26 20:07 | |
I think these failures were on the previous version of the test; i've fixed it last night and it shouldn't timeout this way anymore. | |||
| History | |||
|---|---|---|---|
| Date | User | Action | Args |
| 2022-04-11 14:58:57 | admin | set | github: 76843 |
| 2018-05-29 17:03:12 | yselivanov | set | status: open -> closed resolution: fixed |
| 2018-01-26 20:07:06 | yselivanov | set | messages: +msg310786 |
| 2018-01-26 10:00:41 | vstinner | set | messages: +msg310750 |
| 2018-01-26 09:58:39 | vstinner | set | messages: +msg310749 |
| 2018-01-26 09:56:43 | vstinner | set | status: closed -> open nosy: +vstinner messages: +msg310748 resolution: fixed -> (no value) |
| 2018-01-26 06:31:05 | yselivanov | set | messages: +msg310740 |
| 2018-01-26 05:38:38 | yselivanov | set | pull_requests: +pull_request5185 |
| 2018-01-25 23:08:25 | yselivanov | set | status: open -> closed resolution: fixed stage: patch review -> resolved |
| 2018-01-25 23:08:11 | yselivanov | set | messages: +msg310717 |
| 2018-01-25 06:47:37 | yselivanov | set | keywords: +patch stage: patch review pull_requests: +pull_request5158 |
| 2018-01-25 06:44:24 | yselivanov | create | |