Python Forum
Multiprocessing, class, run and a Queue Object - Printable Version

+- Python Forum (https://python-forum.io)
+-- Forum: Python Coding (https://python-forum.io/forum-7.html)
+--- Forum: General Coding Help (https://python-forum.io/forum-8.html)
+--- Thread: Multiprocessing, class, run and a Queue Object (/thread-28286.html)



Multiprocessing, class, run and a Queue Object - SeanInColo - Jul-12-2020

Using multiprocessing and having difficulty understanding the syntax to use within a class. The premise is that there is a producer process who listens for web requests via a Flask instantiation (attaching to and using Slack API), puts them on a shared Queue object, and then consumers read and process the elements in the queue. I am having issues with the producer. I can't figure how to get access to the "Queue" when a message comes in. I can't seem to override the handle_message as it comes from the Slack Events API. Is there another way/better way to do this?


(Abbreviated to get the main jist):

main.py
---------
def producer(q_in):
    producerObj = MySlackAPIObj(q_in)
    pool.apply_async(producerObj.run())

if __name__ == '__main__':
    pool = mp.Pool()
    manager = mp.Manager()
    dataQueue = manager.Queue()
    producer(dataQueue)
    ..
slackapi.py
-------------
class MySlackAPIObj:
    def __init__(self, q):
        self.theQueue = q

    def run(self):
        slack_events_adapter.start(port=3000, debug=True, use_reloader=False)

    # Example responder to messages posted
    @slack_events_adapter.on("message")
    def handle_message(event_data):
        message = event_data["event"]
        self.theQueue.put( message )           #  This is where it errors!   Self not defined

    # Error events
    @slack_events_adapter.on("error")
    def error_handler(err):
        print("ERROR: " + str(err))