[ This project is no longer maintained, as Python 3.8 will include similar copy speedup builtin. ]
pyfastcopy is a simple Python module that monkey patches the shutil.copyfile
function of Python standard library to internally use the sendfile system call.
It can provide important performance improvements for large file copy (typically 30-40%). See the performance section for some numbers.
Because shutil.copyfile
is used by other fonctions in the shutil
module, the following functions also automatically benefit from the performance boost:
shutil.copy
shutil.copy2
shutil.copytree
If sendfile
is not available on your system or fails, the classic, slower chunk file copy is used, so there is no downside to using this module.
For more information, see my proposed patch for Python.
Tests were done copying files (source and destination) on a tmpfs filesystem, so that no slowdown related to hard drive or SSD storage occurs. Test files were generated with pseudo random data using frandom.
See benchmark.py for details about the test procedure and how the following graphs were generated.
These tests show a 30-50% performance improvement of shutil.copyfile
compared to stock Python.
Just import the module:
import pyfastcopy
And then use the patched shutil.copyfile
as usual:
shutil.copyfile(src, dst)
The sendfile
system call does not exist on Windows, so importing this module will have no effect.
- If you don't already have it, install pip for Python 3 (not needed if you are using Python >= 3.4)
- Install pyfastcopy:
pip3 install pyfastcopy
- Enjoy fast copy when using
shutil.copyfile
,shutil.copy
,shutil.copy2
orshutil.copytree
- If you don't already have it, install setuptools for Python 3
- Clone this repository:
git clone https://github.com/desbma/pyfastcopy
- Install pyfastcopy:
python3 setup.py install
- Enjoy fast copy when using
shutil.copyfile
,shutil.copy
,shutil.copy2
orshutil.copytree
Python Software Foundation License