On Sat, 9 Sep 2017 09:04:59 +0100 Paul Moore <p.f.moore at gmail.com> wrote: > On 9 September 2017 at 00:04, Eric Snow <ericsnowcurrently at gmail.com> wrote: > > add_recv_fifo(name=None): > > > > Create a new FIFO, associate the two ends with the involved > > interpreters, and return the side associated with the interpreter > > in which "add_recv_fifo()" was called. A FIFOReader gets tied to > > this interpreter. A FIFOWriter gets tied to the interpreter that > > called "add_recv_fifo()". > > > > The FIFO's name is set to the provided value. If no name is > > provided then a dynamically generated one is used. If a FIFO > > with the given name is already associated with this interpreter > > (or with the one in which "add_recv_fifo()" was called) then raise > > KeyError. > > > > add_send_fifo(name=None): > > > > Create a new FIFO, associate the two ends with the involved > > interpreters, and return the side associated with the interpreter > > in which "add_recv_fifo()" was called. A FIFOWriter gets tied to > > this interpreter. A FIFOReader gets tied to the interpreter that > > called "add_recv_fifo()". > > > > The FIFO's name is set to the provided value. If no name is > > provided then a dynamically generated one is used. If a FIFO > > with the given name is already associated with this interpreter > > (or with the one in which "add_send_fifo()" was called) then raise > > KeyError. > > Personally, I *always* read these names backwards - from the POV of > the caller. So when I see "add_send_fifo", I then expect to be able to > send stuff on the returned FIFO (i.e., I get a writer back). But > that's not how it works. Hmm, it's even worse for me, as it's not obvious by the quoted excerpt how those APIs are supposed to be used exactly. How does the other interpreter get the FIFO "tied" to it? Is it `get_current().get_fifo(name)`? Something else? How does it get to learn the *name*? Why are FIFOs unidirectional? Does it really make them significantly cheaper? With bidirectional pipes, the whole recv/send confusion would be avoided. As a point of comparison, for default for `multiprocessing.Pipe()` is to create a bidirectional pipe (*), yet I'm sure a multiprocessing Pipe has more overhead than an in-process FIFO. (*) https://docs.python.org/3/library/multiprocessing.html#multiprocessing.Pipe Regards Antoine.
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4