New submission from Faidon Liambotis <parav...@debian.org>:

In certain codebases, it's useful to be able to wait for input from one or more 
file descriptors (e.g. a socket), while at the same time waiting for an event 
triggered by another thread, or perhaps multiprocessing process.

To wait for one or more file descriptors to get ready, the select module can be 
used. However, neither threading.Event() nor multiprocessing.Event() are 
select-able, i.e. they provide no fileno() method.

The standard way one can implement this on Unix is with os.pipe(), but it can 
be tricky (forgetting to use non-blocking I/O etc.). It is also limited to a 
pair of processes at a time. On Linux systems from the past decade, one can 
also implement this much more efficiently using the eventfd() system calls. I 
think similar functionality exists in other Unixes with kqueue etc.

It'd be great if stdlib provided an abstraction over this mechanism. In fact, 
multiprocessing.Event() itself could probably be a thin abstraction over 
eventfd() on Linux? Perhaps even multiprocessing.Semaphore with EFD_SEMAPHORE, 
although I admit I'm less familiar with how all that works.

(Select-able Queues would be even neater, but that's a story for a different 
issue :)

----------
components: Extension Modules
messages: 367975
nosy: paravoid
priority: normal
severity: normal
status: open
title: Provide an abstraction for a select-able Event
type: enhancement
versions: Python 3.9

_______________________________________
Python tracker <rep...@bugs.python.org>
<https://bugs.python.org/issue40485>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to