async def METHOD_NAME():
    parser = argparse.ArgumentParser(description='Notebook scale test.')
    parser.add_argument('n', type=int, help='number of notebooks to start')
    parser.add_argument('workshop', type=str, help='workshop name')
    parser.add_argument('password', type=str, help='workshop password')
    args = parser.parse_args()
    n = args.n
    d = int(math.log10(n)) + 1
    outcomes = await asyncio.gather(*[run(args, str(i).zfill(d)) for i in range(n)])
    times = []
    for duration, ready in outcomes:
        if ready:
            times.append(duration)
    print(f'successes: {len(times)} / {n} = {len(times) / n}')
    print(f'mean time: {sum(times) / n}')
    print(f'quantiles min/50%/95%/99%/max: {np.quantile(times, [0.0, .5, .95, .99, 1.0])}')
    print(f'histogram:\n{np.histogram(times, density=True)}')