from multiprocessing import Process, Queue import time from typing import List import os class Worker(object): def __init__(self, queue: Queue): self.run_flag = True self.queue = queue self.process = Process( target=self.handle_jobs, args=(self.queue,) ) time.sleep(1) self.process.start() def stop(self): self.queue.put(['exit']) self.process.join() @staticmethod def handle_jobs(queue: Queue): while True: if queue.empty(): time.sleep(1) continue cmd_list: List[str] = queue.get() print('received job:\n', cmd_list) if cmd_list[0].lower() == 'exit': break cmd_str = ' && '.join(cmd_list) os.system(cmd_str) if __name__ == '__main__': work_queue: Queue = Queue() worker = Worker(queue=work_queue) work_queue.put(['echo "hello world"', 'echo "hello world again"']) worker.stop()