Python Forum
code pattern for process communication
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
code pattern for process communication
#1
many programs, especially GUI apps, when a 2nd one is started, tell the 1st one to open the window and the 2nd on exits.  i am looking for a suggested code pattern for this kind of communication setup where the process that is the 2nd instance of an executable can find and set up brief communications with the 1st instance of the same executable.  in particular, i am curious how to avoid finding a process of a different executable that is also being interpreted by python.  in a typical GUI case, this communication would send what X display the 2nd instance was started on and any specified parameters to the 1st instance.

this is not a case of existing code that fails because things have not reached that level yet, so there is no (failing) code to show.  i am still thinking through many potential projects and looking for a pattern for this.
Tradition is peer pressure from dead people

What do you call someone who speaks three languages? Trilingual. Two languages? Bilingual. One language? American.
Reply
#2
Sockets? Usually, they are used for interprocess comunication
"As they say in Mexico 'dosvidaniya'. That makes two vidaniyas."
https://freedns.afraid.org
Reply
#3
(Sep-07-2017, 02:54 AM)wavic Wrote: Sockets? Usually, they are used for interprocess comunication
that's what i was initially thinking of doing.  but that would mean the 1st process is perpetually listening on some port.  i don't see that happening.  and i don't see a unix named socket in the file space, either.
Tradition is peer pressure from dead people

What do you call someone who speaks three languages? Trilingual. Two languages? Bilingual. One language? American.
Reply
#4
If you know the pid of the other process, you could use a signal.  The original process would set a signal handler, then anything that sent that signal, would trigger the event to fire off (in this case, opening a new browser window).  That's a little more lightweight than using sockets.

https://docs.python.org/3/library/signal.html
Reply
#5
Quote:That's a little more lightweight than using sockets.
It should be. Event-driven application uses less resources
"As they say in Mexico 'dosvidaniya'. That makes two vidaniyas."
https://freedns.afraid.org
Reply
#6
(Sep-26-2017, 08:14 PM)nilamo Wrote: If you know the pid of the other process, you could use a signal.  The original process would set a signal handler, then anything that sent that signal, would trigger the event to fire off (in this case, opening a new browser window).  That's a little more lightweight than using sockets.

https://docs.python.org/3/library/signal.html
sure, you can send a signal, but that's just an event.  it would have nice to have had, from the beginning, a means to send a block of data from one process to another.  it would be like a datagram where process id == port number, and the listener can only listen on that, and fds can be passed along.  that would allow real communication.  the receiving process gets the process id of the sender, its {e,r}{g,u}id,  ppid, and other info along with up to 4k of data and up to 4 fds.  if that had been in the unix design, lots of things would be so much easier.  but maybe named sockets can be adapted to this.
Tradition is peer pressure from dead people

What do you call someone who speaks three languages? Trilingual. Two languages? Bilingual. One language? American.
Reply
#7
Well, asyncio is capable to wait for a connection and once a such is established a could be used for this purpose. It will not be high CPU load as using while loop.

I forgot to mention that the built-in asyncio Protocols or Transport must be used since there are not blockable.
"As they say in Mexico 'dosvidaniya'. That makes two vidaniyas."
https://freedns.afraid.org
Reply
#8
Unix/Linux has named pipes, which sound almost exactly like what you're talking about.  https://docs.python.org/3/library/os.html#os.mkfifo
How important is it that your program works on windows?
Reply
#9
the big issue for me is finding the other process running the same python code, and being sure the match does not get it wrong by matching "python" to "python" in the process argv[0] string, which a C program might naȉvely do.
Tradition is peer pressure from dead people

What do you call someone who speaks three languages? Trilingual. Two languages? Bilingual. One language? American.
Reply
#10
Maybe a message queue can help. I've used sometimes http://zeromq.org/bindings:python over network. But you can use this also across processes on the same machine and in the same process. There are different patterns. Asyncio is also supported.
Almost dead, but too lazy to die: https://sourceserver.info
All humans together. We don't need politicians!
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  Process finished with exit code 137 (interrupted by signal 9: SIGKILL) erdemath 2 9,384 Apr-18-2022, 08:40 PM
Last Post: erdemath
  Speed up code with second process help samuelbachorik 0 1,381 Sep-04-2021, 09:31 AM
Last Post: samuelbachorik
  Code taking too much time to process ErPipex 11 4,818 Nov-16-2020, 09:42 AM
Last Post: DeaD_EyE
  process finished with exit code -1073741819 (0xC0000005) GMCobraz 8 5,299 Sep-01-2020, 08:19 AM
Last Post: GMCobraz
  packet radio communication EmpireAndrew 1 2,154 Nov-01-2019, 06:35 PM
Last Post: micseydel
  WiFi communication Milad 2 2,418 Sep-07-2019, 11:53 AM
Last Post: ndc85430
  How to sharing object between multiple process from main process using Pipe Subrata 1 3,617 Sep-03-2019, 09:49 PM
Last Post: woooee
  Simple inter-process communication: Switching from Perl to Python Pappy 1 2,861 May-10-2019, 12:29 AM
Last Post: Pappy
  Process finished with exit code -107374819 (0xC0000375) mrazko 2 8,395 Apr-05-2019, 12:46 PM
Last Post: mrazko
  Serial communication with raspberry pi 3B and Xbee kj7 0 2,145 Mar-25-2019, 03:39 AM
Last Post: kj7

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020