Skip to content

Commit 90fbd67

Browse files
committed
Make user interface more robust
1 parent 137bc83 commit 90fbd67

File tree

1 file changed

+19
-13
lines changed

1 file changed

+19
-13
lines changed

Diff for: source-code/multiprocessing/pi_futures.py

+19-13
Original file line numberDiff line numberDiff line change
@@ -19,16 +19,14 @@ def partial_pi(args=(1000, )):
1919
return 4.0*nr_hits/nr_tries
2020

2121

22-
def compute_pi(nr_tries=10000, pool_size=None, constructor=None):
22+
def compute_pi(nr_tries=10000, pool_size=1, constructor=None):
2323
if not constructor:
2424
executor = ProcessPoolExecutor(max_workers=pool_size)
2525
else:
2626
executor = constructor(max_workers=pool_size)
2727
args = [(nr_tries//pool_size, )
2828
for _ in range(pool_size)]
2929
results = executor.map(partial_pi, args)
30-
if not pool_size:
31-
pool_size = multiprocessing.cpu_count()
3230
return sum(results)/pool_size
3331

3432

@@ -37,21 +35,29 @@ def main():
3735
arg_parser.add_argument('--p', dest='pool_size', type=int,
3836
default=1, help='pool size')
3937
arg_parser.add_argument('--n', dest='nr_tries', type=int,
40-
default=1, help='number of tries')
38+
default=1000, help='number of tries')
4139
arg_parser.add_argument('--t', default='processes', dest='type',
4240
choices=['processes', 'threads'],
4341
help='Either use processes or treads')
42+
arg_parser.add_argument('--verbose', action='store_true',
43+
help='generate verbose output')
4444
options = arg_parser.parse_args()
45-
if options.type:
46-
if options.type == 'processes':
47-
constructor = ProcessPoolExecutor
48-
else:
49-
constructor = ThreadPoolExecutor
50-
my_pi = compute_pi(options.nr_tries, options.pool_size, constructor)
45+
if options.nr_tries//options.pool_size == 0:
46+
print(f'#error: too little work, increase --n value to at least '
47+
f'{options.pool_size}',
48+
file=sys.stderr)
49+
sys.exit(1)
50+
if options.type == 'processes':
51+
constructor = ProcessPoolExecutor
5152
else:
52-
my_pi = compute_pi(options.nr_tries, options.pool_size)
53-
print('computed pi = {0:.15f}'.format(my_pi))
54-
print('exact pi = {0:.15f}'.format(math.pi))
53+
constructor = ThreadPoolExecutor
54+
if options.verbose:
55+
print(f'# running using {options.pool_size} {options.type} on '
56+
f'{multiprocessing.cpu_count()} logical cores',
57+
file=sys.stderr)
58+
my_pi = compute_pi(options.nr_tries, options.pool_size, constructor)
59+
print(f'computed pi = {my_pi:.15f}')
60+
print(f'exact pi = {math.pi:.15f}')
5561
return 0
5662

5763
if __name__ == '__main__':

0 commit comments

Comments
 (0)