1234567891011121314151617181920212223242526272829303132333435363738 |
- from concurrent import futures
- import math
- import time
- import sys
- def calc(val):
- time.sleep(1)
- result = math.sqrt(float(val))
- return val, result
- def use_threads(num, values):
- with futures.ThreadPoolExecutor(num) as tex:
- tasks = [tex.submit(calc, value) for value in values]
- for f in futures.as_completed(tasks):
- yield f.result()
- def use_process(num, values):
- with futures.ProcessPoolExecutor(num) as pex:
- tasks = [pex.submit(calc, value) for value in values]
- for f in futures.as_completed(tasks):
- yield f.result()
- def main(workers, values):
- print(f'Using {workers} workers for {len(values)} values')
- print("Using threads:")
- for val, result in use_threads(workers, values):
- print(f'{val} {result:.4f}')
- print("Using processes:")
- for val, result in use_process(workers, values):
- print(f'{val} {result:.4f}')
- if __name__ == '__main__':
- workers = 3
- if len(sys.argv) > 1:
- workers = int(sys.argv[1])
- values = list(range(1, 6))
- main(workers, values)
|