Python binding for Linux AIO
Project description
[english] | [한국어 (korean)]
linux_aio_bind: Python binding for Linux Kernel AIO
A low-level python binding module that matches the Linux kernel AIO system call.
If you are not using the ctypes module to develop high-level python modules directly, but you want to use AIO functionality in python, see High-level python wrapper.
What is Linux Kernel AIO?
In summary, it allows non-blocking and asynchronous use of blocking IO operations such as read(2) and write(2).
Related documents
It is different from POSIX AIO
The POSIX AIO APIs have the aio_
prefix, but the Linux Kernel AIO has the io_
prefix.
There is already a POSIX AIO API for asynchronous I/O, but Linux implements it in glibc, a user-space library, which is supposed to use multi-threading internally. So, as you can see from the experiment, it's much worse than using the blocking IO API.
Implementation & Structure
- ctypes module is used.
- It is defined to correspond
1:1
with the C header of Linux AIO.- Implemented 100% of the functionality when using C.
- All the functions shown in the man page based on Linux man pages (4.16), and all the functions added in 4.20.3 source code, as far as I can find them.
- If you know how to use the ctypes module to operate on pointers, you can also build other types of wrappers based on this package.
- It uses
syscall
for invoking ABI and cffi for gathering different syscall number by architecture on module installation. - python stub (
pyi
files - for type hint) are included. - All error handling in the documentation (based on man-pages 4.16)
Example
Examples can be found in the code in the test directory.
Notes & Limits
- Obviously available only on Linux
- Because it is a wrapper, it brings the constraints of Linux.
- It can not be used for files used as a kernel interface. (e.g.
cgroup
) - Sometimes it works as Blocking.
- There are some things that have been solved through development after posting.
- Some features are being added because they are still under development.
- There are also some features that are not supported when the Linux version is low
- You need to check Linux man pages (4.16) and its related API documentation
- Poll is 4.19 or higher, fsync and fdsync require 4.18 or higher kernel
- It can not be used for files used as a kernel interface. (e.g.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
Hashes for linux_aio_bind-1.0.0-cp37-cp37m-manylinux1_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | c4d74d09eb5075b95dcdb0ff4b77b99ba164b2c908b7677b08003690e984cbbc |
|
MD5 | 53133cbcd29aada0c7923d41945f1427 |
|
BLAKE2b-256 | eede28bbd1aa1d50e5cd4ed250556ab39f904a34c9740fadcd5f862bea310e8c |
Hashes for linux_aio_bind-1.0.0-cp37-cp37m-manylinux1_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 97d7875bc11b41778623a6f7cc6c54f6751b6a7094845b0ff19f4ea0366e8f68 |
|
MD5 | 4da4b334af21f4d60f1ff90a4123ffb6 |
|
BLAKE2b-256 | b19a85f30dd486542f11ffe9c16f8d21434c04de5d8a0a2cb3e7139d0581cc3b |
Hashes for linux_aio_bind-1.0.0-cp36-cp36m-manylinux1_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 21075c295dacb4d8a830e45c592050fb15faa598f0c9c54ef863129f802a66a2 |
|
MD5 | ca024233f8e42af172d07ada2ef64036 |
|
BLAKE2b-256 | 1b8cbe149fe6503720497a43aafbdb60b1b52af5aeb885c590323828d5c4f282 |
Hashes for linux_aio_bind-1.0.0-cp36-cp36m-manylinux1_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 666aa7d52fc7c73c5e24fc14fae56a9134861c7333fe6d7865c742be9ec43453 |
|
MD5 | df6d5a2acb5130fcf35e09e87751cee5 |
|
BLAKE2b-256 | 8a1031f1e80b51e168eae82c5b4229ee6909443a01490a7eb6f0d71af091862b |
Hashes for linux_aio_bind-1.0.0-cp35-cp35m-manylinux1_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | bfcb5891f1d344da1c84e271a7994d8317bb315e56bb7f33318df479d3aedabe |
|
MD5 | eb28eabe9db8ec81f910be9e5ecc791f |
|
BLAKE2b-256 | ba39db6e9f6395ddfa71bd10d63cff3671c5cb74b19ce72abcb09a6952869a45 |
Hashes for linux_aio_bind-1.0.0-cp35-cp35m-manylinux1_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | b9abd070ca2faa96e05e5412ccd5df1488a3fafab67b883ad315a3e3c8cc3a7e |
|
MD5 | a1b92371776325fc61a82e3eef272773 |
|
BLAKE2b-256 | e90622e010f820dc90a8323743485a364f0ecd4053c78e35ba5ce4cc51f1de0b |
Hashes for linux_aio_bind-1.0.0-cp34-cp34m-manylinux1_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | bfeb269314ac736dc35d064cad635d292e79285c71b8dcefb1dce50a83cb6056 |
|
MD5 | 427000365c782b9ecc51e25ed9f92d9b |
|
BLAKE2b-256 | 3b024d3d2f8cfaab73239c9224384f40924c2f2d0e126e9f5d5096fee711df74 |
Hashes for linux_aio_bind-1.0.0-cp34-cp34m-manylinux1_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | e76dbf6c3988f418b277cb94906e3c74a2f13cee187c2f85050f9a9d2ff7b7cc |
|
MD5 | cd5402e609f4f2ae5e3d45318ca6414e |
|
BLAKE2b-256 | adf0533bb803f629c0e4aaf4689725b1b8f2524ab17490570665f061b8c44e12 |
Hashes for linux_aio_bind-1.0.0-cp27-cp27m-manylinux1_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 895763eb854bb07815ab3d28e01a252421de36dbda0931f172d1707d0f0eaf0b |
|
MD5 | 6bdeeeab31e581f9af0f2066a864d6b6 |
|
BLAKE2b-256 | 359388ebd0e3d171ab30a9da592ec8289d806656245b0a5962e2196f71feef48 |
Hashes for linux_aio_bind-1.0.0-cp27-cp27m-manylinux1_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 417a570df02cad9c0b8301aaf60123b244b50096eec2640290c8853c75f7218d |
|
MD5 | 1af14f042100bfcf2e2acf599a54259a |
|
BLAKE2b-256 | 8c462345746388aed8c805324bb2d3b5527e70a0f129b90ccc870d139d29f7ab |