Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from multiprocessing import Manager
- from multiprocessing import Process
- import logging
- from time import sleep
- FORMAT = '%(asctime)-15s %(name)-15.15s %(levelname)-8s %(message)s'
- logging.basicConfig(format=FORMAT, level=logging.INFO)
- logger = logging.getLogger(__name__)
- class Producer():
- def __init__(self, settings: dict):
- self.name = settings['name']
- self.settings = settings
- self.status_dict = {}
- logger.info("init")
- def set_status_dict(self, status: dict):
- self.status_dict = status
- self.status_dict['name'] = self.name
- def _set_status(self, status_message):
- self.status_dict['status'] = status_message
- def run(self):
- self._set_status('started')
- counter = 0
- while counter < 5:
- counter += 1
- logger.info("iteration {0}".format(counter))
- self._set_status("Iteration {0}".format(counter))
- sleep(5)
- self._set_status('finished')
- def start_producer(producer_setting: dict, status_dict: dict):
- importer = Producer(producer_setting)
- importer.set_status_dict(status_dict)
- importer.run()
- if __name__ == '__main__':
- with Manager() as manager:
- producers = []
- settings = [{'name':'test'}]
- for setting in settings:
- status = manager.dict()
- logger.info("Start Producer {0}".format(setting['name']))
- producer = Process(target=start_producer, args=(setting, status))
- producer.start()
- producers.append([producer, status])
- logger.info("initialized {0} producers".format(len(producers)))
- while True:
- text_command = input('Enter your command:')
- if text_command == 'exit':
- logger.info("waiting for producers")
- for p in producers:
- p[0].join()
- logger.info("Exit application.")
- break
- elif text_command == 'status':
- for p in producers:
- if 'name' in p[1] and 'status' in p[1]:
- print('{0}:{1}'.format(p[1]['name'], p[1]['status']))
- else:
- print("Unknown command.")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement