ANN: pyftpdlib 1.0.0 released

Giampaolo Rodolà g.rodola at
Tue Feb 19 14:11:04 CET 2013

Hi there guys,
After 1 year of development and refinements I'm pleased to announce a
release of pyftpdlib which appears to be the fastest FTP server out
there (on UNIX at least)! See:

1.0.0 release introduces serious improvements amongst which python 3
support (finally!) and full Unicode support.  Here's the major ones.

=== New IO loop and epoll() / kqueue() support ===

The IO loop, originally relying on asyncore, has been rewritten from
scratch (
and now supports epoll() on Linux and kqueue() on OSX/BSD.
Also select() (Windows) and poll() pollers have been rewritten
resulting in pyftpdlib being an order of magnitude faster and more
scalable than ever. Read the full story here:

=== Alternative concurrency model ===

It is now possible to change the default concurrency model from async
(non blocking) to multiple processes / threads based, meaning you are
now free to block as long as you want and support particularly slow
Switching is as easy as changing an import. More information are here:

=== Python 3 porting + full Unicode support ===


=== Logging ===

logging module is now used for logging as replacement for log(),
logline() and logerror() functions which are now deprecated. Also, the
whole logging infrastructure has been refactored and it is more
compact and consistent. Also by default pyftpdlib logs will have

=== Other improvements ===

 * a new FilesystemError exception class is available in order send
   custom error strings to client from an AbstracteFS subclass.

 * on_connect() and on_disconnect() callbacks

 * FTPHandler.ftp_* methods implementing filesystem-related commands
   now return a meaningful value on success (tipically the path name).

 * FTPServer.serve_forever() has a new handle_exit parameter which
   can be set to False in order to avoid handling SIGTERM/SIGINT signals.

=== Backward compatibility breakage ===

A lot of backward incompatible changes have been introduced amongst
which the different import system, the different
validate_authentication() signature and the fact that the filesystem
class now expects Unicode strings rather than bytes. HISTORY file
enlists all of them and also provides a guide on how to port your
existent to this new version.

=== Some links ===

Complete list of changes:

That should be all folks.
I hope you'll enjoy this new version,

Giampaolo Rodola'

More information about the Python-list mailing list