Inter-process communication, how?

John Machin sjmachin at lexicon.net
Sat Dec 15 23:24:29 EST 2007


On Dec 16, 2:34 pm, ecir.h... at gmail.com wrote:
> >         If it is a one-shot (spawn sub, wait, retrieve results) you could
> > generate a temporary file name in the parent, pass that name to the sub
> > when invoking it, wait for the sub to complete (giving you a status
> > code) and then read the result the sub has written to the file.
>
> Yes, it's once shot. But how do I pass "that name"?
> From all the arguments of class Popen (http://docs.python.org/lib/
> node529.html) perhaps I could use "env" only. Or am I wrong?

Yes. Consider this: If you were to run your calculation script from
the shell prompt [strongly recommended during testing], how would you
tell it the name of the file? Now look at the docs again.
>
> PS: both with mmpam and temp file you probably meant that I should
> hard code some as-weirdest-filename-as-possible two both programs but
> what if I run the computation several times?

That's mmap, not mmpam. No, Dennis didn't mean that you should hard
code a filename. Have a look at the tempfile module.


>
> And thanks for reply!
>
>
>
> >         Or, you could have parent and sub both mmap the same "file",
> > essentially passing data in memory unless it becomes too large and pages
> > out to swap disk. You might even be able to do bidirectional and dynamic
> > updates (rather than waiting for the sub to exit)... Define, say, an
> > epoch count for each process -- these would be the first two words of
> > the mmap file
>
> > |p-epoch|s-epoch|n-words of p-data (fixed constant known to both)|n-words of s-data|
>
> > periodically the parent would examine the value of s-epoch, and if it
> > has changed, read the s-data.. (both sides write the data first, then
> > update the epoch count). When the epoch stays the same and two
> > consecutive reads of the data match, you have stable data (so the reads
> > should occur more often than updates) and can process the data
> > transferred.
>
> >         OR, you could have the parent open a TCP/IP socket as a server, and
> > pass the socket port number to the sub. The sub would then connect to
> > that port and write the data. For bidirectional you could pass the
> > parent port, and the sub's first action is to connect and pass a port
> > that it will be monitoring.
>
> >         On a VMS system, the processes would connect to named "mailboxes"
> > and use QIO operations to pass data between them.
>
> >         On an Amiga you'd use "message ports" (which operated somewhat
> > similar to VMS mailboxes except that mailboxes had an independent
> > existence, multiple processes can read or write to them -- message ports
> > were readable by the creating process, but could have messages sent from
> > anywhere; typically passing the message port [address of a linked list
> > of messages] for replies). Or a higher level message port: an ARexx
> > port.
>
> >         On a Windows NT class system, the win32 extensions allow access to
> > Windows Named Pipes... Or maybe the Windows clipboard could be used...
> > --
> >         Wulfraed        Dennis Lee Bieber               KD6MOG
> >         wlfr... at ix.netcom.com             wulfr... at bestiaria.com
> >                 HTTP://wlfraed.home.netcom.com/
> >         (Bestiaria Support Staff:               web-a... at bestiaria.com)
> >                 HTTP://www.bestiaria.com/




More information about the Python-list mailing list