parsl 2024.5.13__tar.gz → 2024.5.27__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {parsl-2024.5.13/parsl.egg-info → parsl-2024.5.27}/PKG-INFO +2 -2
- {parsl-2024.5.13 → parsl-2024.5.27}/README.rst +8 -6
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/channels/base.py +2 -9
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/channels/local/local.py +3 -6
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/channels/oauth_ssh/oauth_ssh.py +2 -2
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/channels/ssh/ssh.py +2 -2
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/config.py +7 -1
- parsl-2024.5.27/parsl/dataflow/dependency_resolvers.py +115 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/dataflow/dflow.py +45 -39
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/executors/__init__.py +2 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/executors/base.py +7 -7
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/executors/high_throughput/errors.py +10 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/executors/high_throughput/executor.py +85 -84
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/executors/high_throughput/interchange.py +6 -5
- parsl-2024.5.27/parsl/executors/high_throughput/mpi_executor.py +85 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/executors/high_throughput/mpi_prefix_composer.py +18 -2
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/executors/high_throughput/mpi_resource_management.py +3 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/executors/high_throughput/zmq_pipes.py +36 -2
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/executors/radical/rpex_resources.py +3 -7
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/monitoring/remote.py +18 -24
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/providers/local/local.py +1 -1
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/conftest.py +2 -2
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/sites/test_dynamic_executor.py +0 -1
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_bash_apps/test_std_uri.py +0 -6
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_checkpointing/test_periodic.py +2 -7
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_checkpointing/test_python_checkpoint_2.py +0 -1
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_checkpointing/test_python_checkpoint_3.py +0 -1
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_checkpointing/test_task_exit.py +0 -1
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_htex/test_basic.py +0 -1
- parsl-2024.5.27/parsl/tests/test_htex/test_command_client_timeout.py +69 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_htex/test_cpu_affinity_explicit.py +1 -8
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_htex/test_manager_failure.py +0 -1
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_htex/test_managers_command.py +2 -7
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_htex/test_missing_worker.py +2 -8
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_monitoring/test_app_names.py +0 -1
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_monitoring/test_basic.py +0 -2
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_monitoring/test_db_locks.py +0 -1
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_monitoring/test_fuzz_zmq.py +0 -1
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_monitoring/test_htex_init_blocks_vs_monitoring.py +0 -2
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_monitoring/test_incomplete_futures.py +0 -1
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_monitoring/test_memoization_representation.py +0 -1
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_monitoring/test_stdouterr.py +0 -2
- parsl-2024.5.27/parsl/tests/test_mpi_apps/test_bad_mpi_config.py +33 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_mpi_apps/test_mpi_mode_disabled.py +2 -8
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_mpi_apps/test_mpi_mode_enabled.py +10 -1
- parsl-2024.5.27/parsl/tests/test_mpi_apps/test_mpiex.py +64 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_mpi_apps/test_resource_spec.py +14 -9
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_python_apps/test_context_manager.py +1 -9
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_python_apps/test_lifted.py +10 -6
- parsl-2024.5.27/parsl/tests/test_python_apps/test_pluggable_future_resolution.py +161 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_scaling/test_regression_1621.py +0 -2
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_scaling/test_shutdown_scalein.py +0 -2
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_serialization/test_proxystore_configured.py +0 -1
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_shutdown/test_kill_monitoring.py +0 -2
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_staging/test_1316.py +0 -2
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_staging/test_elaborate_noop_file.py +0 -1
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_summary.py +0 -1
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_threads/test_configs.py +0 -1
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_threads/test_lazy_errors.py +0 -1
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/version.py +1 -1
- {parsl-2024.5.13 → parsl-2024.5.27/parsl.egg-info}/PKG-INFO +2 -2
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl.egg-info/SOURCES.txt +5 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl.egg-info/requires.txt +4 -2
- {parsl-2024.5.13 → parsl-2024.5.27}/setup.py +1 -1
- parsl-2024.5.13/parsl/tests/test_mpi_apps/test_bad_mpi_config.py +0 -41
- {parsl-2024.5.13 → parsl-2024.5.27}/LICENSE +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/MANIFEST.in +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/__init__.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/addresses.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/app/__init__.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/app/app.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/app/bash.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/app/errors.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/app/futures.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/app/python.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/benchmark/__init__.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/benchmark/perf.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/channels/__init__.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/channels/errors.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/channels/local/__init__.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/channels/oauth_ssh/__init__.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/channels/ssh/__init__.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/channels/ssh_il/__init__.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/channels/ssh_il/ssh_il.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/concurrent/__init__.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/configs/ASPIRE1.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/configs/Azure.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/configs/__init__.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/configs/ad_hoc.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/configs/bridges.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/configs/cc_in2p3.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/configs/ec2.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/configs/expanse.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/configs/frontera.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/configs/htex_local.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/configs/illinoiscluster.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/configs/kubernetes.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/configs/local_threads.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/configs/midway.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/configs/osg.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/configs/polaris.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/configs/stampede2.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/configs/summit.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/configs/toss3_llnl.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/configs/vineex_local.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/configs/wqex_local.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/curvezmq.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/data_provider/__init__.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/data_provider/data_manager.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/data_provider/file_noop.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/data_provider/files.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/data_provider/ftp.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/data_provider/globus.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/data_provider/http.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/data_provider/rsync.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/data_provider/staging.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/data_provider/zip.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/dataflow/__init__.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/dataflow/errors.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/dataflow/futures.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/dataflow/memoization.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/dataflow/rundirs.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/dataflow/states.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/dataflow/taskrecord.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/errors.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/executors/errors.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/executors/flux/__init__.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/executors/flux/execute_parsl_task.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/executors/flux/executor.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/executors/flux/flux_instance_manager.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/executors/high_throughput/__init__.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/executors/high_throughput/manager_record.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/executors/high_throughput/monitoring_info.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/executors/high_throughput/probe.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/executors/high_throughput/process_worker_pool.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/executors/radical/__init__.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/executors/radical/executor.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/executors/radical/rpex_master.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/executors/radical/rpex_worker.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/executors/status_handling.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/executors/taskvine/__init__.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/executors/taskvine/errors.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/executors/taskvine/exec_parsl_function.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/executors/taskvine/executor.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/executors/taskvine/factory.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/executors/taskvine/factory_config.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/executors/taskvine/manager.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/executors/taskvine/manager_config.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/executors/taskvine/utils.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/executors/threads.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/executors/workqueue/__init__.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/executors/workqueue/errors.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/executors/workqueue/exec_parsl_function.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/executors/workqueue/executor.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/executors/workqueue/parsl_coprocess.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/executors/workqueue/parsl_coprocess_stub.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/jobs/__init__.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/jobs/error_handlers.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/jobs/errors.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/jobs/job_status_poller.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/jobs/states.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/jobs/strategy.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/launchers/__init__.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/launchers/base.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/launchers/errors.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/launchers/launchers.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/log_utils.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/monitoring/__init__.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/monitoring/db_manager.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/monitoring/message_type.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/monitoring/monitoring.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/monitoring/queries/__init__.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/monitoring/queries/pandas.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/monitoring/radios.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/monitoring/router.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/monitoring/types.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/monitoring/visualization/__init__.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/monitoring/visualization/app.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/monitoring/visualization/models.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/monitoring/visualization/plots/__init__.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/monitoring/visualization/plots/default/__init__.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/monitoring/visualization/plots/default/task_plots.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/monitoring/visualization/plots/default/workflow_plots.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/monitoring/visualization/plots/default/workflow_resource_plots.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/monitoring/visualization/static/parsl-logo-white.png +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/monitoring/visualization/static/parsl-monitor.css +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/monitoring/visualization/templates/app.html +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/monitoring/visualization/templates/dag.html +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/monitoring/visualization/templates/error.html +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/monitoring/visualization/templates/layout.html +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/monitoring/visualization/templates/resource_usage.html +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/monitoring/visualization/templates/task.html +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/monitoring/visualization/templates/workflow.html +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/monitoring/visualization/templates/workflows_summary.html +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/monitoring/visualization/utils.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/monitoring/visualization/version.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/monitoring/visualization/views.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/multiprocessing.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/process_loggers.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/providers/__init__.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/providers/ad_hoc/__init__.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/providers/ad_hoc/ad_hoc.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/providers/aws/__init__.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/providers/aws/aws.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/providers/aws/template.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/providers/azure/__init__.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/providers/azure/azure.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/providers/azure/template.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/providers/base.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/providers/cluster_provider.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/providers/cobalt/__init__.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/providers/cobalt/cobalt.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/providers/cobalt/template.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/providers/condor/__init__.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/providers/condor/condor.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/providers/condor/template.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/providers/errors.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/providers/googlecloud/__init__.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/providers/googlecloud/googlecloud.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/providers/grid_engine/__init__.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/providers/grid_engine/grid_engine.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/providers/grid_engine/template.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/providers/kubernetes/__init__.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/providers/kubernetes/kube.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/providers/kubernetes/template.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/providers/local/__init__.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/providers/lsf/__init__.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/providers/lsf/lsf.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/providers/lsf/template.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/providers/pbspro/__init__.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/providers/pbspro/pbspro.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/providers/pbspro/template.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/providers/slurm/__init__.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/providers/slurm/slurm.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/providers/slurm/template.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/providers/torque/__init__.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/providers/torque/template.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/providers/torque/torque.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/py.typed +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/serialize/__init__.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/serialize/base.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/serialize/concretes.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/serialize/errors.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/serialize/facade.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/serialize/proxystore.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/__init__.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/callables_helper.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/configs/__init__.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/configs/ad_hoc_cluster_htex.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/configs/azure_single_node.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/configs/bluewaters.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/configs/bridges.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/configs/cc_in2p3.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/configs/comet.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/configs/cooley_htex.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/configs/ec2_single_node.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/configs/ec2_spot.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/configs/frontera.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/configs/htex_ad_hoc_cluster.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/configs/htex_local.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/configs/htex_local_alternate.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/configs/htex_local_intask_staging.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/configs/htex_local_rsync_staging.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/configs/local_adhoc.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/configs/local_radical.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/configs/local_radical_mpi.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/configs/local_threads.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/configs/local_threads_checkpoint.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/configs/local_threads_checkpoint_dfk_exit.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/configs/local_threads_checkpoint_periodic.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/configs/local_threads_checkpoint_task_exit.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/configs/local_threads_ftp_in_task.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/configs/local_threads_globus.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/configs/local_threads_http_in_task.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/configs/local_threads_monitoring.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/configs/local_threads_no_cache.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/configs/midway.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/configs/nscc_singapore.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/configs/osg_htex.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/configs/petrelkube.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/configs/summit.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/configs/swan_htex.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/configs/taskvine_ex.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/configs/theta.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/configs/user_opts.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/configs/workqueue_ex.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/integration/__init__.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/integration/latency.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/integration/test_apps/__init__.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/integration/test_channels/__init__.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/integration/test_channels/test_channels.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/integration/test_channels/test_local_channel.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/integration/test_channels/test_scp_1.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/integration/test_channels/test_ssh_1.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/integration/test_channels/test_ssh_errors.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/integration/test_channels/test_ssh_file_transport.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/integration/test_channels/test_ssh_interactive.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/integration/test_parsl_load_default_config.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/integration/test_stress/__init__.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/integration/test_stress/test_python_simple.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/integration/test_stress/test_python_threads.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/manual_tests/__init__.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/manual_tests/htex_local.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/manual_tests/test_ad_hoc_htex.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/manual_tests/test_basic.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/manual_tests/test_fan_in_out_htex_remote.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/manual_tests/test_log_filter.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/manual_tests/test_memory_limits.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/manual_tests/test_oauth_ssh.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/manual_tests/test_regression_220.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/manual_tests/test_udp_simple.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/manual_tests/test_worker_count.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/scaling_tests/__init__.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/scaling_tests/htex_local.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/scaling_tests/local_threads.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/scaling_tests/test_scale.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/scaling_tests/vineex_condor.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/scaling_tests/vineex_local.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/scaling_tests/wqex_condor.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/scaling_tests/wqex_local.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/site_tests/__init__.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/site_tests/site_config_selector.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/site_tests/test_provider.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/site_tests/test_site.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/sites/__init__.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/sites/test_affinity.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/sites/test_concurrent.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/sites/test_ec2.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/sites/test_launchers.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/sites/test_local_adhoc.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/sites/test_mpi/__init__.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/sites/test_worker_info.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_aalst_patterns.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_bash_apps/__init__.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_bash_apps/test_apptimeout.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_bash_apps/test_basic.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_bash_apps/test_error_codes.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_bash_apps/test_keyword_overlaps.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_bash_apps/test_kwarg_storage.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_bash_apps/test_memoize.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_bash_apps/test_memoize_ignore_args.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_bash_apps/test_memoize_ignore_args_regr.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_bash_apps/test_multiline.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_bash_apps/test_pipeline.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_bash_apps/test_stdout.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_callables.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_channels/__init__.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_channels/test_large_output.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_checkpointing/__init__.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_checkpointing/test_python_checkpoint_1.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_checkpointing/test_regression_232.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_checkpointing/test_regression_233.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_checkpointing/test_regression_239.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_curvezmq.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_docs/__init__.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_docs/test_from_slides.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_docs/test_kwargs.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_docs/test_tutorial_1.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_docs/test_workflow1.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_docs/test_workflow2.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_docs/test_workflow4.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_error_handling/__init__.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_error_handling/test_fail.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_error_handling/test_python_walltime.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_error_handling/test_rand_fail.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_error_handling/test_resource_spec.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_error_handling/test_retries.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_error_handling/test_retry_handler.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_error_handling/test_retry_handler_failure.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_error_handling/test_serialization_fail.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_error_handling/test_wrap_with_logs.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_flowcontrol/__init__.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_flux.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_htex/__init__.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_htex/test_connected_blocks.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_htex/test_disconnected_blocks.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_htex/test_drain.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_htex/test_htex.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_htex/test_multiple_disconnected_blocks.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_htex/test_worker_failure.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_htex/test_zmq_binding.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_monitoring/__init__.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_monitoring/test_viz_colouring.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_mpi_apps/__init__.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_mpi_apps/test_mpi_prefix.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_mpi_apps/test_mpi_scheduler.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_providers/__init__.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_providers/test_cobalt_deprecation_warning.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_providers/test_local_provider.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_providers/test_pbspro_template.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_providers/test_slurm_instantiate.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_providers/test_slurm_template.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_providers/test_submiterror_deprecation.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_python_apps/__init__.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_python_apps/test_arg_input_types.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_python_apps/test_basic.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_python_apps/test_dep_standard_futures.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_python_apps/test_dependencies.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_python_apps/test_depfail_propagation.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_python_apps/test_fail.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_python_apps/test_fibonacci_iterative.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_python_apps/test_fibonacci_recursive.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_python_apps/test_futures.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_python_apps/test_garbage_collect.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_python_apps/test_import_fail.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_python_apps/test_join.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_python_apps/test_mapred.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_python_apps/test_memoize_1.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_python_apps/test_memoize_2.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_python_apps/test_memoize_4.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_python_apps/test_memoize_bad_id_for_memo.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_python_apps/test_memoize_ignore_args.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_python_apps/test_memoize_joinapp.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_python_apps/test_outputs.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_python_apps/test_overview.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_python_apps/test_pipeline.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_python_apps/test_simple.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_python_apps/test_timeout.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_python_apps/test_type5.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_radical/__init__.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_radical/test_mpi_funcs.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_regression/__init__.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_regression/test_1480.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_regression/test_1606_wait_for_current_tasks.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_regression/test_1653.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_regression/test_221.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_regression/test_226.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_regression/test_2652.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_regression/test_69a.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_regression/test_854.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_regression/test_97_parallelism_0.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_regression/test_98.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_scaling/__init__.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_scaling/test_block_error_handler.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_scaling/test_scale_down.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_scaling/test_scale_down_htex_auto_scale.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_scaling/test_scale_down_htex_unregistered.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_serialization/__init__.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_serialization/test_2555_caching_deserializer.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_serialization/test_basic.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_serialization/test_htex_code_cache.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_serialization/test_pack_resource_spec.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_serialization/test_proxystore_impl.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_shutdown/__init__.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_staging/__init__.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_staging/staging_provider.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_staging/test_docs_1.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_staging/test_docs_2.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_staging/test_file.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_staging/test_file_apps.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_staging/test_file_staging.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_staging/test_output_chain_filenames.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_staging/test_staging_ftp.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_staging/test_staging_ftp_in_task.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_staging/test_staging_globus.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_staging/test_staging_https.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_staging/test_staging_stdout.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_staging/test_zip_in.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_staging/test_zip_out.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_staging/test_zip_to_zip.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_thread_parallelism.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_threads/__init__.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_utils/__init__.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_utils/test_representation_mixin.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/unit/__init__.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/unit/test_file.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/utils.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/usage_tracking/__init__.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/usage_tracking/api.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/usage_tracking/usage.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl/utils.py +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl.egg-info/dependency_links.txt +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl.egg-info/entry_points.txt +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/parsl.egg-info/top_level.txt +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/requirements.txt +0 -0
- {parsl-2024.5.13 → parsl-2024.5.27}/setup.cfg +0 -0
@@ -1,9 +1,9 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: parsl
|
3
|
-
Version: 2024.5.
|
3
|
+
Version: 2024.5.27
|
4
4
|
Summary: Simple data dependent workflows in Python
|
5
5
|
Home-page: https://github.com/Parsl/parsl
|
6
|
-
Download-URL: https://github.com/Parsl/parsl/archive/2024.05.
|
6
|
+
Download-URL: https://github.com/Parsl/parsl/archive/2024.05.27.tar.gz
|
7
7
|
Author: The Parsl Team
|
8
8
|
Author-email: parsl@googlegroups.com
|
9
9
|
License: Apache 2.0
|
@@ -22,17 +22,19 @@ Parsl lets you chain functions together and will launch each function as inputs
|
|
22
22
|
return x + 1
|
23
23
|
|
24
24
|
@python_app
|
25
|
-
def g(x):
|
26
|
-
return x
|
25
|
+
def g(x, y):
|
26
|
+
return x + y
|
27
27
|
|
28
28
|
# Start Parsl on a single computer
|
29
29
|
with parsl.load():
|
30
|
-
# These functions now return Futures
|
30
|
+
# These functions now return Futures
|
31
31
|
future = f(1)
|
32
32
|
assert future.result() == 2
|
33
33
|
|
34
|
-
|
35
|
-
|
34
|
+
# Functions run concurrently, can be chained
|
35
|
+
f_a, f_b = f(2), f(3)
|
36
|
+
future = g(f_a, f_b)
|
37
|
+
assert future.result() == 7
|
36
38
|
|
37
39
|
|
38
40
|
Start with the `configuration quickstart <https://parsl.readthedocs.io/en/stable/quickstart.html#getting-started>`_ to learn how to tell Parsl how to use your computing resource,
|
@@ -120,7 +122,7 @@ Parsl is supported in Python 3.8+. Requirements can be found `here <requirements
|
|
120
122
|
Code of Conduct
|
121
123
|
===============
|
122
124
|
|
123
|
-
Parsl seeks to foster an open and welcoming environment - Please see the `Parsl Code of Conduct <https://github.com/Parsl/parsl
|
125
|
+
Parsl seeks to foster an open and welcoming environment - Please see the `Parsl Code of Conduct <https://github.com/Parsl/parsl?tab=coc-ov-file#parsl-code-of-conduct>`_ for more details.
|
124
126
|
|
125
127
|
Contributing
|
126
128
|
============
|
@@ -89,15 +89,8 @@ class Channel(metaclass=ABCMeta):
|
|
89
89
|
pass
|
90
90
|
|
91
91
|
@abstractmethod
|
92
|
-
def close(self) ->
|
93
|
-
''' Closes the channel.
|
94
|
-
|
95
|
-
Args:
|
96
|
-
None
|
97
|
-
|
98
|
-
Returns:
|
99
|
-
Bool
|
100
|
-
|
92
|
+
def close(self) -> None:
|
93
|
+
''' Closes the channel.
|
101
94
|
'''
|
102
95
|
pass
|
103
96
|
|
@@ -107,13 +107,10 @@ class LocalChannel(Channel, RepresentationMixin):
|
|
107
107
|
def pull_file(self, remote_source, local_dir):
|
108
108
|
return self.push_file(remote_source, local_dir)
|
109
109
|
|
110
|
-
def close(self):
|
111
|
-
''' There's nothing to close here, and this
|
112
|
-
|
113
|
-
Returns:
|
114
|
-
- False, because it really did not "close" this channel.
|
110
|
+
def close(self) -> None:
|
111
|
+
''' There's nothing to close here, and so this doesn't do anything
|
115
112
|
'''
|
116
|
-
|
113
|
+
pass
|
117
114
|
|
118
115
|
def isdir(self, path):
|
119
116
|
"""Return true if the path refers to an existing directory.
|
@@ -217,9 +217,9 @@ class SSHChannel(Channel, RepresentationMixin):
|
|
217
217
|
|
218
218
|
return local_dest
|
219
219
|
|
220
|
-
def close(self):
|
220
|
+
def close(self) -> None:
|
221
221
|
if self._is_connected():
|
222
|
-
|
222
|
+
self.ssh_client.close()
|
223
223
|
|
224
224
|
def isdir(self, path):
|
225
225
|
"""Return true if the path refers to an existing directory.
|
@@ -5,6 +5,7 @@ from typing import Callable, Iterable, Optional, Sequence, Union
|
|
5
5
|
from typing_extensions import Literal
|
6
6
|
|
7
7
|
from parsl.utils import RepresentationMixin
|
8
|
+
from parsl.dataflow.dependency_resolvers import DependencyResolver
|
8
9
|
from parsl.executors.base import ParslExecutor
|
9
10
|
from parsl.executors.threads import ThreadPoolExecutor
|
10
11
|
from parsl.errors import ConfigurationError
|
@@ -35,6 +36,8 @@ class Config(RepresentationMixin, UsageInformation):
|
|
35
36
|
checkpoint_period : str, optional
|
36
37
|
Time interval (in "HH:MM:SS") at which to checkpoint completed tasks. Only has an effect if
|
37
38
|
``checkpoint_mode='periodic'``.
|
39
|
+
dependency_resolver: plugin point for custom dependency resolvers. Default: only resolve Futures,
|
40
|
+
using the `SHALLOW_DEPENDENCY_RESOLVER`.
|
38
41
|
garbage_collect : bool. optional.
|
39
42
|
Delete task records from DFK when tasks have completed. Default: True
|
40
43
|
internal_tasks_max_threads : int, optional
|
@@ -88,6 +91,7 @@ class Config(RepresentationMixin, UsageInformation):
|
|
88
91
|
Literal['dfk_exit'],
|
89
92
|
Literal['manual']] = None,
|
90
93
|
checkpoint_period: Optional[str] = None,
|
94
|
+
dependency_resolver: Optional[DependencyResolver] = None,
|
91
95
|
garbage_collect: bool = True,
|
92
96
|
internal_tasks_max_threads: int = 10,
|
93
97
|
retries: int = 0,
|
@@ -123,6 +127,7 @@ class Config(RepresentationMixin, UsageInformation):
|
|
123
127
|
if checkpoint_mode == 'periodic' and checkpoint_period is None:
|
124
128
|
checkpoint_period = "00:30:00"
|
125
129
|
self.checkpoint_period = checkpoint_period
|
130
|
+
self.dependency_resolver = dependency_resolver
|
126
131
|
self.garbage_collect = garbage_collect
|
127
132
|
self.internal_tasks_max_threads = internal_tasks_max_threads
|
128
133
|
self.retries = retries
|
@@ -152,4 +157,5 @@ class Config(RepresentationMixin, UsageInformation):
|
|
152
157
|
', '.join(['label={}'.format(repr(d)) for d in duplicates])))
|
153
158
|
|
154
159
|
def get_usage_information(self):
|
155
|
-
return {"executors_len": len(self.executors)
|
160
|
+
return {"executors_len": len(self.executors),
|
161
|
+
"dependency_resolver": self.dependency_resolver is not None}
|
@@ -0,0 +1,115 @@
|
|
1
|
+
from concurrent.futures import Future
|
2
|
+
from dataclasses import dataclass
|
3
|
+
from functools import singledispatch
|
4
|
+
from typing import Callable, Sequence
|
5
|
+
|
6
|
+
|
7
|
+
@dataclass
|
8
|
+
class DependencyResolver:
|
9
|
+
"""A DependencyResolver describes how app dependencies can be resolved.
|
10
|
+
It is specified as two functions: `traverse_to_gather` which turns an
|
11
|
+
app parameter into a sequence of futures which must be waited for before
|
12
|
+
the task can be executed (for example, in the case of
|
13
|
+
`DEEP_DEPENDENCY_RESOLVER` this traverses structures such as lists to
|
14
|
+
find every contained ``Future``), and `traverse_to_unwrap` which turns an
|
15
|
+
app parameter into its value to be passed to the app on execution
|
16
|
+
(for example in the case of `DEEP_DEPENDENCY_RESOLVER` this replaces a
|
17
|
+
list containing futures with a new list containing the values of those
|
18
|
+
resolved futures).
|
19
|
+
|
20
|
+
By default, Parsl will use `SHALLOW_DEPENDENCY_RESOLVER` which only
|
21
|
+
resolves Futures passed directly as arguments.
|
22
|
+
"""
|
23
|
+
traverse_to_gather: Callable[[object], Sequence[Future]]
|
24
|
+
traverse_to_unwrap: Callable[[object], object]
|
25
|
+
|
26
|
+
|
27
|
+
@singledispatch
|
28
|
+
def shallow_traverse_to_gather(o):
|
29
|
+
# objects in general do not expose futures that we can see
|
30
|
+
return []
|
31
|
+
|
32
|
+
|
33
|
+
@singledispatch
|
34
|
+
def shallow_traverse_to_unwrap(o):
|
35
|
+
# objects in general unwrap to themselves
|
36
|
+
return o
|
37
|
+
|
38
|
+
|
39
|
+
@shallow_traverse_to_gather.register
|
40
|
+
def _(fut: Future):
|
41
|
+
return [fut]
|
42
|
+
|
43
|
+
|
44
|
+
@shallow_traverse_to_unwrap.register
|
45
|
+
@singledispatch
|
46
|
+
def _(fut: Future):
|
47
|
+
assert fut.done()
|
48
|
+
return fut.result()
|
49
|
+
|
50
|
+
|
51
|
+
@singledispatch
|
52
|
+
def deep_traverse_to_gather(o):
|
53
|
+
# objects in general do not expose futures that we can see
|
54
|
+
return []
|
55
|
+
|
56
|
+
|
57
|
+
@singledispatch
|
58
|
+
def deep_traverse_to_unwrap(o):
|
59
|
+
# objects in general unwrap to themselves
|
60
|
+
return o
|
61
|
+
|
62
|
+
|
63
|
+
@deep_traverse_to_gather.register
|
64
|
+
def _(fut: Future):
|
65
|
+
return [fut]
|
66
|
+
|
67
|
+
|
68
|
+
@deep_traverse_to_unwrap.register
|
69
|
+
@singledispatch
|
70
|
+
def _(fut: Future):
|
71
|
+
assert fut.done()
|
72
|
+
return fut.result()
|
73
|
+
|
74
|
+
|
75
|
+
@deep_traverse_to_gather.register(tuple)
|
76
|
+
@deep_traverse_to_gather.register(list)
|
77
|
+
@deep_traverse_to_gather.register(set)
|
78
|
+
def _(iterable):
|
79
|
+
return [e for v in iterable for e in deep_traverse_to_gather(v)]
|
80
|
+
|
81
|
+
|
82
|
+
@deep_traverse_to_unwrap.register(tuple)
|
83
|
+
@deep_traverse_to_unwrap.register(list)
|
84
|
+
@deep_traverse_to_unwrap.register(set)
|
85
|
+
@singledispatch
|
86
|
+
def _(iterable):
|
87
|
+
|
88
|
+
type_ = type(iterable)
|
89
|
+
return type_(map(deep_traverse_to_unwrap, iterable))
|
90
|
+
|
91
|
+
|
92
|
+
@deep_traverse_to_gather.register(dict)
|
93
|
+
def _(dictionary):
|
94
|
+
futures = []
|
95
|
+
for key, value in dictionary.items():
|
96
|
+
futures.extend(deep_traverse_to_gather(key))
|
97
|
+
futures.extend(deep_traverse_to_gather(value))
|
98
|
+
return futures
|
99
|
+
|
100
|
+
|
101
|
+
@deep_traverse_to_unwrap.register(dict)
|
102
|
+
def _(dictionary):
|
103
|
+
unwrapped_dict = {}
|
104
|
+
for key, value in dictionary.items():
|
105
|
+
key = deep_traverse_to_unwrap(key)
|
106
|
+
value = deep_traverse_to_unwrap(value)
|
107
|
+
unwrapped_dict[key] = value
|
108
|
+
return unwrapped_dict
|
109
|
+
|
110
|
+
|
111
|
+
DEEP_DEPENDENCY_RESOLVER = DependencyResolver(traverse_to_gather=deep_traverse_to_gather,
|
112
|
+
traverse_to_unwrap=deep_traverse_to_unwrap)
|
113
|
+
|
114
|
+
SHALLOW_DEPENDENCY_RESOLVER = DependencyResolver(traverse_to_gather=shallow_traverse_to_gather,
|
115
|
+
traverse_to_unwrap=shallow_traverse_to_unwrap)
|
@@ -26,6 +26,7 @@ from parsl.channels import Channel
|
|
26
26
|
from parsl.config import Config
|
27
27
|
from parsl.data_provider.data_manager import DataManager
|
28
28
|
from parsl.data_provider.files import File
|
29
|
+
from parsl.dataflow.dependency_resolvers import SHALLOW_DEPENDENCY_RESOLVER
|
29
30
|
from parsl.dataflow.errors import BadCheckpoint, DependencyError, JoinError
|
30
31
|
from parsl.dataflow.futures import AppFuture
|
31
32
|
from parsl.dataflow.memoization import Memoizer
|
@@ -203,6 +204,9 @@ class DataFlowKernel:
|
|
203
204
|
self.tasks: Dict[int, TaskRecord] = {}
|
204
205
|
self.submitter_lock = threading.Lock()
|
205
206
|
|
207
|
+
self.dependency_resolver = self.config.dependency_resolver if self.config.dependency_resolver is not None \
|
208
|
+
else SHALLOW_DEPENDENCY_RESOLVER
|
209
|
+
|
206
210
|
atexit.register(self.atexit_cleanup)
|
207
211
|
|
208
212
|
def __enter__(self):
|
@@ -852,8 +856,11 @@ class DataFlowKernel:
|
|
852
856
|
depends: List[Future] = []
|
853
857
|
|
854
858
|
def check_dep(d: Any) -> None:
|
855
|
-
|
856
|
-
depends.extend(
|
859
|
+
try:
|
860
|
+
depends.extend(self.dependency_resolver.traverse_to_gather(d))
|
861
|
+
except Exception:
|
862
|
+
logger.exception("Exception in dependency_resolver.traverse_to_gather")
|
863
|
+
raise
|
857
864
|
|
858
865
|
# Check the positional args
|
859
866
|
for dep in args:
|
@@ -870,7 +877,8 @@ class DataFlowKernel:
|
|
870
877
|
|
871
878
|
return depends
|
872
879
|
|
873
|
-
def _unwrap_futures(self, args, kwargs)
|
880
|
+
def _unwrap_futures(self, args: Sequence[Any], kwargs: Dict[str, Any]) \
|
881
|
+
-> Tuple[Sequence[Any], Dict[str, Any], Sequence[Tuple[Exception, str]]]:
|
874
882
|
"""This function should be called when all dependencies have completed.
|
875
883
|
|
876
884
|
It will rewrite the arguments for that task, replacing each Future
|
@@ -891,53 +899,40 @@ class DataFlowKernel:
|
|
891
899
|
"""
|
892
900
|
dep_failures = []
|
893
901
|
|
902
|
+
def append_failure(e: Exception, dep: Future) -> None:
|
903
|
+
# If this Future is associated with a task inside this DFK,
|
904
|
+
# then refer to the task ID.
|
905
|
+
# Otherwise make a repr of the Future object.
|
906
|
+
if hasattr(dep, 'task_record') and dep.task_record['dfk'] == self:
|
907
|
+
tid = "task " + repr(dep.task_record['id'])
|
908
|
+
else:
|
909
|
+
tid = repr(dep)
|
910
|
+
dep_failures.extend([(e, tid)])
|
911
|
+
|
894
912
|
# Replace item in args
|
895
913
|
new_args = []
|
896
914
|
for dep in args:
|
897
|
-
|
898
|
-
|
899
|
-
|
900
|
-
|
901
|
-
# If this Future is associated with a task inside this DFK,
|
902
|
-
# then refer to the task ID.
|
903
|
-
# Otherwise make a repr of the Future object.
|
904
|
-
if hasattr(dep, 'task_record') and dep.task_record['dfk'] == self:
|
905
|
-
tid = "task " + repr(dep.task_record['id'])
|
906
|
-
else:
|
907
|
-
tid = repr(dep)
|
908
|
-
dep_failures.extend([(e, tid)])
|
909
|
-
else:
|
910
|
-
new_args.extend([dep])
|
915
|
+
try:
|
916
|
+
new_args.extend([self.dependency_resolver.traverse_to_unwrap(dep)])
|
917
|
+
except Exception as e:
|
918
|
+
append_failure(e, dep)
|
911
919
|
|
912
920
|
# Check for explicit kwargs ex, fu_1=<fut>
|
913
921
|
for key in kwargs:
|
914
922
|
dep = kwargs[key]
|
915
|
-
|
916
|
-
|
917
|
-
|
918
|
-
|
919
|
-
if hasattr(dep, 'task_record'):
|
920
|
-
tid = dep.task_record['id']
|
921
|
-
else:
|
922
|
-
tid = None
|
923
|
-
dep_failures.extend([(e, tid)])
|
923
|
+
try:
|
924
|
+
kwargs[key] = self.dependency_resolver.traverse_to_unwrap(dep)
|
925
|
+
except Exception as e:
|
926
|
+
append_failure(e, dep)
|
924
927
|
|
925
928
|
# Check for futures in inputs=[<fut>...]
|
926
929
|
if 'inputs' in kwargs:
|
927
930
|
new_inputs = []
|
928
931
|
for dep in kwargs['inputs']:
|
929
|
-
|
930
|
-
|
931
|
-
|
932
|
-
|
933
|
-
if hasattr(dep, 'task_record'):
|
934
|
-
tid = dep.task_record['id']
|
935
|
-
else:
|
936
|
-
tid = None
|
937
|
-
dep_failures.extend([(e, tid)])
|
938
|
-
|
939
|
-
else:
|
940
|
-
new_inputs.extend([dep])
|
932
|
+
try:
|
933
|
+
new_inputs.extend([self.dependency_resolver.traverse_to_unwrap(dep)])
|
934
|
+
except Exception as e:
|
935
|
+
append_failure(e, dep)
|
941
936
|
kwargs['inputs'] = new_inputs
|
942
937
|
|
943
938
|
return new_args, kwargs, dep_failures
|
@@ -1042,6 +1037,8 @@ class DataFlowKernel:
|
|
1042
1037
|
|
1043
1038
|
func = self._add_output_deps(executor, app_args, app_kwargs, app_fu, func)
|
1044
1039
|
|
1040
|
+
logger.debug("Added output dependencies")
|
1041
|
+
|
1045
1042
|
# Replace the function invocation in the TaskRecord with whatever file-staging
|
1046
1043
|
# substitutions have been made.
|
1047
1044
|
task_record.update({
|
@@ -1053,8 +1050,10 @@ class DataFlowKernel:
|
|
1053
1050
|
|
1054
1051
|
self.tasks[task_id] = task_record
|
1055
1052
|
|
1053
|
+
logger.debug("Gathering dependencies")
|
1056
1054
|
# Get the list of dependencies for the task
|
1057
1055
|
depends = self._gather_all_deps(app_args, app_kwargs)
|
1056
|
+
logger.debug("Gathered dependencies")
|
1058
1057
|
task_record['depends'] = depends
|
1059
1058
|
|
1060
1059
|
depend_descs = []
|
@@ -1156,7 +1155,7 @@ class DataFlowKernel:
|
|
1156
1155
|
executor.run_id = self.run_id
|
1157
1156
|
executor.run_dir = self.run_dir
|
1158
1157
|
executor.hub_address = self.hub_address
|
1159
|
-
executor.
|
1158
|
+
executor.hub_zmq_port = self.hub_zmq_port
|
1160
1159
|
if self.monitoring:
|
1161
1160
|
executor.monitoring_radio = self.monitoring.radio
|
1162
1161
|
if hasattr(executor, 'provider'):
|
@@ -1271,6 +1270,13 @@ class DataFlowKernel:
|
|
1271
1270
|
atexit.unregister(self.atexit_cleanup)
|
1272
1271
|
logger.info("Unregistered atexit hook")
|
1273
1272
|
|
1273
|
+
if DataFlowKernelLoader._dfk is self:
|
1274
|
+
logger.info("Unregistering default DFK")
|
1275
|
+
parsl.clear()
|
1276
|
+
logger.info("Unregistered default DFK")
|
1277
|
+
else:
|
1278
|
+
logger.debug("Cleaning up non-default DFK - not unregistering")
|
1279
|
+
|
1274
1280
|
logger.info("DFK cleanup complete")
|
1275
1281
|
|
1276
1282
|
def checkpoint(self, tasks: Optional[Sequence[TaskRecord]] = None) -> str:
|
@@ -1,9 +1,11 @@
|
|
1
1
|
from parsl.executors.threads import ThreadPoolExecutor
|
2
2
|
from parsl.executors.workqueue.executor import WorkQueueExecutor
|
3
3
|
from parsl.executors.high_throughput.executor import HighThroughputExecutor
|
4
|
+
from parsl.executors.high_throughput.mpi_executor import MPIExecutor
|
4
5
|
from parsl.executors.flux.executor import FluxExecutor
|
5
6
|
|
6
7
|
__all__ = ['ThreadPoolExecutor',
|
7
8
|
'HighThroughputExecutor',
|
9
|
+
'MPIExecutor',
|
8
10
|
'WorkQueueExecutor',
|
9
11
|
'FluxExecutor']
|
@@ -50,13 +50,13 @@ class ParslExecutor(metaclass=ABCMeta):
|
|
50
50
|
self,
|
51
51
|
*,
|
52
52
|
hub_address: Optional[str] = None,
|
53
|
-
|
53
|
+
hub_zmq_port: Optional[int] = None,
|
54
54
|
monitoring_radio: Optional[MonitoringRadio] = None,
|
55
55
|
run_dir: str = ".",
|
56
56
|
run_id: Optional[str] = None,
|
57
57
|
):
|
58
58
|
self.hub_address = hub_address
|
59
|
-
self.
|
59
|
+
self.hub_zmq_port = hub_zmq_port
|
60
60
|
self.monitoring_radio = monitoring_radio
|
61
61
|
self.run_dir = os.path.abspath(run_dir)
|
62
62
|
self.run_id = run_id
|
@@ -136,14 +136,14 @@ class ParslExecutor(metaclass=ABCMeta):
|
|
136
136
|
self._hub_address = value
|
137
137
|
|
138
138
|
@property
|
139
|
-
def
|
139
|
+
def hub_zmq_port(self) -> Optional[int]:
|
140
140
|
"""Port to the Hub for monitoring.
|
141
141
|
"""
|
142
|
-
return self.
|
142
|
+
return self._hub_zmq_port
|
143
143
|
|
144
|
-
@
|
145
|
-
def
|
146
|
-
self.
|
144
|
+
@hub_zmq_port.setter
|
145
|
+
def hub_zmq_port(self, value: Optional[int]) -> None:
|
146
|
+
self._hub_zmq_port = value
|
147
147
|
|
148
148
|
@property
|
149
149
|
def monitoring_radio(self) -> Optional[MonitoringRadio]:
|
@@ -10,3 +10,13 @@ class WorkerLost(Exception):
|
|
10
10
|
|
11
11
|
def __str__(self):
|
12
12
|
return self.__repr__()
|
13
|
+
|
14
|
+
|
15
|
+
class CommandClientTimeoutError(Exception):
|
16
|
+
"""Raised when the command client times out waiting for a response.
|
17
|
+
"""
|
18
|
+
|
19
|
+
|
20
|
+
class CommandClientBadError(Exception):
|
21
|
+
"""Raised when the command client is bad from an earlier timeout.
|
22
|
+
"""
|