Non-blocking multiprocessing.connection.Listener?

One solution that I found (although it might not be the most “elegant” solution is using conn.poll. (documentation) Poll returns True if the Listener has new data, and (most importantly) is nonblocking if no argument is passed to it. I’m not 100% sure that this is the best way to do this, but I’ve had success with only running listener.accept() once, and then using the following syntax to repeatedly get input (if there is any available)

from multiprocessing.connection import Listener

def mainloop():
    running = True

    listener = Listener(address=(localhost, 6000), authkey=b'secret')
    conn = listener.accept()
    msg = ""

    while running:
        while conn.poll():
            msg = conn.recv() 
            print (f"got message: {msg}")

            if msg == "EXIT":
                running = False

        # Other code can go here
        print(f"I can run too! Last msg received was {msg}")

     conn.close()

The ‘while’ in the conditional statement can be replaced with ‘if,’ if you only want to get a maximum of one message at a time. Use with caution, as it seems sort of ‘hacky,’ and I haven’t found references to using conn.poll for this purpose elsewhere.

Leave a Comment

Hata!: SQLSTATE[HY000] [1045] Access denied for user 'divattrend_liink'@'localhost' (using password: YES)