This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

Author vstinner
Recipients Mariatta, aeros, asvetlov, barry, dankreso, grzgrzgrz3, iritkatriel, jacksonriley, nanjekyejoannah, vstinner, yselivanov
Date 2021-11-11.12:12:46
SpamBayes Score -1.0
Marked as misclassified Yes
Message-id <1636632766.34.0.927527648657.issue28533@roundup.psfhosted.org>
In-reply-to
Content
I forgot about this issue and I created a duplicate: bpo-45785. Copy of my messages.

I propose to remove asyncore, asynchat and smtpd modules from the Python standard library to remove the Python maintenance burden. These modules are deprecated since Python 3.6.

--

The asyncore module is a very old module of the Python stdlib for asynchronous programming, usually to handle network sockets concurrently. It's a common event loop, but its design has many flaws.

The asyncio module was added to Python 3.4 with a well designed architecture. Twisted developers who have like 10 to 20 years of experience in asynchronous programming helped to design the asyncio API.

By design, asyncio doesn't have flaws which would be really hard to fix in asyncore and asynchat.

It was decided to start deprecating the asyncore and asynchat module in Python 3.6 released in 2016, 5 years ago. Open issues in asyncore and asynchat have been closed as "wont fix" because the module is deprecated. The two modules are basically no longer maintained.

Documentation:

* https://docs.python.org/dev/library/asyncore.html
* https://docs.python.org/dev/library/asynchat.html

I propose to remove the two modules right now in the Python stdlib. They were removed for 4 Python releases (3.6-3.10), it's long enough to respect the PEP 387. The PEP requires 2 Python releases at least before considering removing code.

Since there are still 7 tests of the Python test suite still uses asyncore and asynchat, I propose to move these modules in Lib/test/ directory and make them private:

* Rename Lib/asyncore.py to Lib/test/support/_asyncore.py
* Rename Lib/asynchat.py to Lib/test/support/_asynchat.py

Projects using asyncore and asynchat should use asyncio. If someone really wants to continue using asyncore and asynchat, it's trivial to copy asyncore.py and asynchat.py in their project, and maintain these files on their side.

--

About the smtpd module, it is also deprecated since Python 3.6 (deprecated for 4 Python releases). It's used by a single test (test_logging). I also propose to remove it from the stdlib.

I proposed to rename Lib/smtpd.py to Lib/test/support/_smtpd.py.

Projects using smtpd can consider using aiosmtpd which is based on asyncio:
https://aiosmtpd.readthedocs.io/

Or again, they can copy Python 3.10 smtpd.py in their project and maintain this file on their side.

--

Ah, a DeprecationWarning warning is only emitted at runtime since Python 3.10. What's New in Python 3.10:

"asynchat, asyncore, smtpd: These modules have been marked as deprecated in their module documentation since Python 3.6.  An import-time DeprecationWarning has now been added to all three of these modules."

https://docs.python.org/dev/whatsnew/3.10.html#asynchat-asyncore-smtpd
History
Date User Action Args
2021-11-11 12:12:46vstinnersetrecipients: + vstinner, barry, asvetlov, yselivanov, grzgrzgrz3, Mariatta, nanjekyejoannah, aeros, jacksonriley, dankreso, iritkatriel
2021-11-11 12:12:46vstinnersetmessageid: <1636632766.34.0.927527648657.issue28533@roundup.psfhosted.org>
2021-11-11 12:12:46vstinnerlinkissue28533 messages
2021-11-11 12:12:46vstinnercreate