process.py 895 B

12345678910111213141516171819202122232425
  1. from UserList import UserList
  2. class ProcessQueue(UserList):
  3. """Queue of running child processes, which starts waiting for the
  4. processes to finish when the queue limit is reached."""
  5. def __init__(self, limit, logger=None, done_msg=None):
  6. self.limit = limit
  7. self.logger = logger
  8. self.done_msg = done_msg
  9. self.data = []
  10. def add(self, result, task_name, task_id):
  11. self.data.append([result, task_name, task_id])
  12. if self.data and len(self.data) >= self.limit:
  13. for result, task_name, task_id in self.data:
  14. ret_value = result.get()
  15. if self.done_msg and self.logger:
  16. self.logger.info(self.done_msg % {
  17. "name": task_name,
  18. "id": task_id,
  19. "return_value": ret_value})
  20. self.data = []