[Python-de] ANN: pyftpdlib 0.7.0 released

g.rodola at gmail.com g.rodola at gmail.com
Mi Jan 25 21:13:16 CET 2012


Hi,
I'm pleased to announce release 0.7.0 of Python FTP Server library (pyftpdlib).
http://code.google.com/p/pyftpdlib/

=== About ===

Python FTP server library provides an high-level portable interface to easily write asynchronous FTP/S servers with Python. pyftpdlib is currently the most complete RFC-959 FTP server implementation available for Python programming language.

=== sendfile() ===

sendfile(2) system call usage has finally been introduced. sendfile(2) provides a "zero-copy" way of copying data from one file descriptor to another (a socket). The phrase "zero-copy" refers to the fact that all of the copying of data between the two descriptors is done entirely by the kernel, with no copying of data into userspace buffers, resuting in file transfers (RETR, hence from server to client) being from 2x to 3x faster.

A simple benchmark:

pyftpdlib 0.6.0:    693.41 MB/sec
pyftpdlib 0.7.0:   1694.14 MB/sec
proftpd 1.3.4rc2:  1313.77 MB/sec
vsftpd 2.3.2:      1505.18 MB/sec

In order to use sendfile(2) you'll have to install pysendfile module first (UNIX only):
http://code.google.com/p/pysendfile/

=== Faster scheduler ===

The internal scheduler, governed by CallLater and CallEvery classes, has been rewritten from scratch and it is an order of magnitue faster, especially for operations like cancel() which are involved when clients are disconnected (hence invoked very often). Some benchmarks:

schedule: +0.5x
reschedule: +1.7x
cancel: +477x (with 1 milion scheduled functions)
run: +8x

Also, a single scheduled function now consumes 1/3 of the memory thanks to __slots__ usage.
For further details see: http://code.google.com/p/pyftpdlib/issues/detail?id=189

=== SITE CHMOD ===

This new version supports SITE CHMOD command, meaning the client is now able to change file mode bits by issuing "SITE CHMOD path mode" command. The authorizer now accepts a new "M" permission bit, which, when specified, enables SITE CHMOD usage:

>>> authorizer = DummyAuthorizer()
>>> authorizer.add_user('user', 'password', '/home/user', perm='elradfmwM')

=== Other improvements ===

* on_failed_login() callback: this is called when user provides wrong credentials.
* CallEvery class: same as CallLater, but keeps calling a function every X seconds.
* A benchmark script: http://code.google.com/p/pyftpdlib/source/browse/trunk/test/bench.py
* Anti flood demo script: http://pyftpdlib.googlecode.com/svn/trunk/demo/anti_flood_ftpd.py

A complete list of changes including enhancements and bug fixes is available here:
http://code.google.com/p/pyftpdlib/wiki/ReleaseNotes07

=== More links ===

* Source tarball: http://pyftpdlib.googlecode.com/files/pyftpdlib-0.7.0.tar.gz
* Online docs: http://code.google.com/p/pyftpdlib/wiki/Tutorial
* FAQs: http://code.google.com/p/pyftpdlib/wiki/FAQ
* RFCs compliance paper: http://code.google.com/p/pyftpdlib/wiki/RFCsCompliance
* Issue tracker: http://code.google.com/p/pyftpdlib/issues/list

If you think pyftpdlib is worth a donation you can do so by going here:
http://code.google.com/p/pyftpdlib/wiki/Donate

Thanks,

--- Giampaolo Rodola'
http://code.google.com/p/pyftpdlib/
http://code.google.com/p/psutil/
http://code.google.com/p/pysendfile/


Mehr Informationen über die Mailingliste python-de