cf2.py 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. from concurrent import futures
  2. import math
  3. import time
  4. import sys
  5. def calc(val):
  6. time.sleep(1)
  7. result = math.sqrt(float(val))
  8. return val, result
  9. def use_threads(num, values):
  10. with futures.ThreadPoolExecutor(num) as tex:
  11. tasks = [tex.submit(calc, value) for value in values]
  12. for f in futures.as_completed(tasks):
  13. yield f.result()
  14. def use_process(num, values):
  15. with futures.ProcessPoolExecutor(num) as pex:
  16. tasks = [pex.submit(calc, value) for value in values]
  17. for f in futures.as_completed(tasks):
  18. yield f.result()
  19. def main(workers, values):
  20. print(f'Using {workers} workers for {len(values)} values')
  21. print("Using threads:")
  22. for val, result in use_threads(workers, values):
  23. print(f'{val} {result:.4f}')
  24. print("Using processes:")
  25. for val, result in use_process(workers, values):
  26. print(f'{val} {result:.4f}')
  27. if __name__ == '__main__':
  28. workers = 3
  29. if len(sys.argv) > 1:
  30. workers = int(sys.argv[1])
  31. values = list(range(1, 6))
  32. main(workers, values)