PyKQueue is a Python module that provides an object-oriented interface to the FreeBSD syscalls kqueue(2) and kevent(2).
The kqueue system provides a more robust and less compute-intensive way to monitor system and file events. Instead of slinging huge arrays as needed with select(2), kevent(2) takes a list of KEvents to monitor, and keeps watching them until they're explicitly deleted -- no need to keep passing in the same objects over and over again. This methodology promotes the construction of large asynchronous frameworks, such as the one used in the asyncore Python module.
The current version is 1.4, available at
http://ox.eicat.ca/~dgilbert/files/
PyKQueue provides fairly direct access to the kqueue and kevent calls, so reading the kqueue(2) and kevent(2) manpages is a must.
You will want to import all the symbols from the KQueue module to make accessing the functions easier: use 'from KQueue import *
' in the beginning of your Python program.
The available constructors are:
KQueue()
-- Creates a new kernel queue and returns an integer describing it. kq = KQueue()
KEvent(ident, filter=EVFILT_READ, flags=EV_ADD, fflags=None, data=None, udata=None)
-- Creates a new KEvent object, which tracks events on a particular object. Ident is usually a file descriptor but can be any object supported by kevent(2)
.kev = KEvent(file.fileno()) # Create a KEvent that triggers when the file object file is ready for reading
The available methods of a KQueue are:
event(kevs, wantEvents, timeout)
: Wait for an event to trigger, adding the list of KEvents in kevs to the set of filters. Retrieve up to wantEvents events and wait up to timeout milliseconds for an event to show up. Triggered events are returned as a list of KEvents; if the timeout expires, an empty list is returned. Filters that detect an error will return a KEvent with the EV_ERROR flag set. kevs
should be an empty list if there are no changes to the event watch list.
Please email them to ports@dclg.ca.