New submission from STINNER Victor <vstin...@python.org>:

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.

----------
components: Library (Lib)
messages: 406156
nosy: vstinner
priority: normal
severity: normal
status: open
title: Remove asyncore, asynchat and smtpd modules
versions: Python 3.11

_______________________________________
Python tracker <rep...@bugs.python.org>
<https://bugs.python.org/issue45785>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to