File: run.py

package info (click to toggle)
python-parsl 2025.01.13%2Bds-1
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 12,072 kB
  • sloc: python: 23,817; makefile: 349; sh: 276; ansic: 45
file content (35 lines) | stat: -rw-r--r-- 1,277 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
from argparse import ArgumentParser

import parsl

from library.config import make_local_config
from library.app import convert_many_to_binary
from parsl.app.python import PythonApp

# Protect the script from running twice.
#  See "Safe importing of main module" in Python multiprocessing docs
#  https://docs.python.org/3/library/multiprocessing.html#multiprocessing-programming
if __name__ == "__main__":
    # Get user instructions
    parser = ArgumentParser()
    parser.add_argument('--numbers-per-batch', default=8, type=int)
    parser.add_argument('numbers', nargs='+', type=int)
    args = parser.parse_args()

    # Prepare the workflow functions
    convert_app = PythonApp(convert_many_to_binary, cache=False)

    # Load the configuration
    #  As a context manager so resources are shutdown on exit
    with parsl.load(make_local_config()):

        # Spawn tasks
        futures = [
            convert_app(args.numbers[start:start + args.numbers_per_batch])
            for start in range(0, len(args.numbers), args.numbers_per_batch)
        ]

        # Retrieve task results
        for future in futures:
            for x, b in zip(future.task_record['args'][0], future.result()):
                print(f'{x} -> {"".join("1" if i else "0" for i in b)}')