testdynpool.py 873 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. from billiard.pool import DynamicPool
  2. from multiprocessing import get_logger, log_to_stderr
  3. import logging
  4. def setup_logger():
  5. log_to_stderr()
  6. logger = get_logger()
  7. logger.setLevel(logging.DEBUG)
  8. return logger
  9. def target(n):
  10. r = n * n
  11. setup_logger().info("%d * %d = %d" % (n, n, r))
  12. return r
  13. def exit_process():
  14. setup_logger().error("EXITING NOW!")
  15. import os
  16. os._exit(0)
  17. def send_exit(pool):
  18. pool.apply_async(exit_process)
  19. def do_work(pool):
  20. results = [pool.apply_async(target, args=[i]) for i in range(10)]
  21. [result.get() for result in results]
  22. def workpool():
  23. pool = DynamicPool(2)
  24. do_work(pool)
  25. print("GROWING")
  26. pool.grow(1)
  27. do_work(pool)
  28. send_exit(pool)
  29. import time
  30. time.sleep(2)
  31. pool.replace_dead_workers()
  32. do_work(pool)
  33. if __name__ == "__main__":
  34. workpool()