parsl 2024.3.4__tar.gz → 2024.3.11__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.3.4/parsl.egg-info → parsl-2024.3.11}/PKG-INFO +2 -2
- {parsl-2024.3.4 → parsl-2024.3.11}/README.rst +4 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/addresses.py +1 -1
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/dataflow/dflow.py +11 -6
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/dataflow/taskrecord.py +3 -1
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/executors/high_throughput/executor.py +22 -10
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/executors/high_throughput/interchange.py +13 -2
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/executors/high_throughput/process_worker_pool.py +7 -2
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/executors/taskvine/executor.py +3 -1
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/jobs/strategy.py +2 -1
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/monitoring/db_manager.py +25 -5
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/monitoring/monitoring.py +6 -2
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/monitoring/remote.py +29 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/monitoring/visualization/models.py +7 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/providers/slurm/slurm.py +13 -2
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/configs/user_opts.py +3 -1
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_scaling/test_scale_down_htex_auto_scale.py +2 -1
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/usage_tracking/usage.py +5 -9
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/version.py +1 -1
- {parsl-2024.3.4 → parsl-2024.3.11/parsl.egg-info}/PKG-INFO +2 -2
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl.egg-info/SOURCES.txt +0 -1
- parsl-2024.3.4/parsl/configs/bluewaters.py +0 -28
- {parsl-2024.3.4 → parsl-2024.3.11}/LICENSE +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/MANIFEST.in +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/__init__.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/app/__init__.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/app/app.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/app/bash.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/app/errors.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/app/futures.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/app/python.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/benchmark/__init__.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/benchmark/perf.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/channels/__init__.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/channels/base.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/channels/errors.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/channels/local/__init__.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/channels/local/local.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/channels/oauth_ssh/__init__.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/channels/oauth_ssh/oauth_ssh.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/channels/ssh/__init__.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/channels/ssh/ssh.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/channels/ssh_il/__init__.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/channels/ssh_il/ssh_il.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/concurrent/__init__.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/config.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/configs/ASPIRE1.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/configs/Azure.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/configs/__init__.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/configs/ad_hoc.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/configs/bridges.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/configs/cc_in2p3.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/configs/ec2.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/configs/expanse.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/configs/frontera.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/configs/htex_local.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/configs/illinoiscluster.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/configs/kubernetes.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/configs/local_threads.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/configs/midway.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/configs/osg.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/configs/polaris.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/configs/stampede2.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/configs/summit.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/configs/toss3_llnl.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/configs/vineex_local.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/configs/wqex_local.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/curvezmq.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/data_provider/__init__.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/data_provider/data_manager.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/data_provider/file_noop.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/data_provider/files.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/data_provider/ftp.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/data_provider/globus.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/data_provider/http.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/data_provider/rsync.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/data_provider/staging.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/dataflow/__init__.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/dataflow/errors.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/dataflow/futures.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/dataflow/memoization.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/dataflow/rundirs.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/dataflow/states.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/errors.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/executors/__init__.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/executors/base.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/executors/errors.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/executors/flux/__init__.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/executors/flux/execute_parsl_task.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/executors/flux/executor.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/executors/flux/flux_instance_manager.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/executors/high_throughput/__init__.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/executors/high_throughput/errors.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/executors/high_throughput/manager_record.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/executors/high_throughput/monitoring_info.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/executors/high_throughput/mpi_prefix_composer.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/executors/high_throughput/mpi_resource_management.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/executors/high_throughput/probe.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/executors/high_throughput/zmq_pipes.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/executors/radical/__init__.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/executors/radical/executor.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/executors/radical/rpex_master.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/executors/radical/rpex_resources.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/executors/radical/rpex_worker.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/executors/status_handling.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/executors/taskvine/__init__.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/executors/taskvine/errors.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/executors/taskvine/exec_parsl_function.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/executors/taskvine/factory.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/executors/taskvine/factory_config.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/executors/taskvine/manager.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/executors/taskvine/manager_config.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/executors/taskvine/utils.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/executors/threads.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/executors/workqueue/__init__.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/executors/workqueue/errors.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/executors/workqueue/exec_parsl_function.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/executors/workqueue/executor.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/executors/workqueue/parsl_coprocess.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/executors/workqueue/parsl_coprocess_stub.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/jobs/__init__.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/jobs/error_handlers.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/jobs/errors.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/jobs/job_status_poller.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/jobs/states.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/launchers/__init__.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/launchers/base.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/launchers/errors.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/launchers/launchers.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/log_utils.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/monitoring/__init__.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/monitoring/message_type.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/monitoring/queries/__init__.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/monitoring/queries/pandas.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/monitoring/radios.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/monitoring/types.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/monitoring/visualization/__init__.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/monitoring/visualization/app.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/monitoring/visualization/plots/__init__.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/monitoring/visualization/plots/default/__init__.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/monitoring/visualization/plots/default/task_plots.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/monitoring/visualization/plots/default/workflow_plots.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/monitoring/visualization/plots/default/workflow_resource_plots.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/monitoring/visualization/static/parsl-logo-white.png +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/monitoring/visualization/static/parsl-monitor.css +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/monitoring/visualization/templates/app.html +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/monitoring/visualization/templates/dag.html +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/monitoring/visualization/templates/error.html +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/monitoring/visualization/templates/layout.html +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/monitoring/visualization/templates/resource_usage.html +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/monitoring/visualization/templates/task.html +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/monitoring/visualization/templates/workflow.html +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/monitoring/visualization/templates/workflows_summary.html +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/monitoring/visualization/utils.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/monitoring/visualization/version.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/monitoring/visualization/views.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/multiprocessing.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/process_loggers.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/providers/__init__.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/providers/ad_hoc/__init__.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/providers/ad_hoc/ad_hoc.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/providers/aws/__init__.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/providers/aws/aws.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/providers/aws/template.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/providers/azure/__init__.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/providers/azure/azure.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/providers/azure/template.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/providers/base.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/providers/cluster_provider.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/providers/cobalt/__init__.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/providers/cobalt/cobalt.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/providers/cobalt/template.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/providers/condor/__init__.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/providers/condor/condor.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/providers/condor/template.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/providers/errors.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/providers/googlecloud/__init__.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/providers/googlecloud/googlecloud.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/providers/grid_engine/__init__.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/providers/grid_engine/grid_engine.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/providers/grid_engine/template.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/providers/kubernetes/__init__.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/providers/kubernetes/kube.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/providers/kubernetes/template.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/providers/local/__init__.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/providers/local/local.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/providers/lsf/__init__.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/providers/lsf/lsf.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/providers/lsf/template.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/providers/pbspro/__init__.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/providers/pbspro/pbspro.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/providers/pbspro/template.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/providers/slurm/__init__.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/providers/slurm/template.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/providers/torque/__init__.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/providers/torque/template.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/providers/torque/torque.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/py.typed +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/serialize/__init__.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/serialize/base.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/serialize/concretes.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/serialize/errors.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/serialize/facade.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/serialize/proxystore.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/__init__.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/callables_helper.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/configs/__init__.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/configs/ad_hoc_cluster_htex.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/configs/azure_single_node.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/configs/bluewaters.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/configs/bridges.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/configs/cc_in2p3.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/configs/comet.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/configs/cooley_htex.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/configs/ec2_single_node.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/configs/ec2_spot.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/configs/frontera.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/configs/htex_ad_hoc_cluster.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/configs/htex_local.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/configs/htex_local_alternate.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/configs/htex_local_intask_staging.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/configs/htex_local_rsync_staging.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/configs/local_adhoc.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/configs/local_radical.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/configs/local_radical_mpi.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/configs/local_threads.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/configs/local_threads_checkpoint.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/configs/local_threads_checkpoint_dfk_exit.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/configs/local_threads_checkpoint_periodic.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/configs/local_threads_checkpoint_task_exit.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/configs/local_threads_ftp_in_task.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/configs/local_threads_globus.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/configs/local_threads_http_in_task.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/configs/local_threads_monitoring.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/configs/local_threads_no_cache.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/configs/midway.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/configs/nscc_singapore.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/configs/osg_htex.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/configs/petrelkube.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/configs/summit.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/configs/swan_htex.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/configs/taskvine_ex.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/configs/theta.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/configs/workqueue_ex.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/conftest.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/integration/__init__.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/integration/latency.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/integration/test_apps/__init__.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/integration/test_channels/__init__.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/integration/test_channels/test_channels.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/integration/test_channels/test_local_channel.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/integration/test_channels/test_scp_1.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/integration/test_channels/test_ssh_1.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/integration/test_channels/test_ssh_errors.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/integration/test_channels/test_ssh_file_transport.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/integration/test_channels/test_ssh_interactive.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/integration/test_parsl_load_default_config.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/integration/test_stress/__init__.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/integration/test_stress/test_python_simple.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/integration/test_stress/test_python_threads.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/manual_tests/__init__.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/manual_tests/htex_local.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/manual_tests/test_ad_hoc_htex.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/manual_tests/test_basic.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/manual_tests/test_fan_in_out_htex_remote.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/manual_tests/test_log_filter.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/manual_tests/test_memory_limits.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/manual_tests/test_oauth_ssh.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/manual_tests/test_regression_220.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/manual_tests/test_udp_simple.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/manual_tests/test_worker_count.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/scaling_tests/__init__.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/scaling_tests/htex_local.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/scaling_tests/local_threads.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/scaling_tests/test_scale.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/scaling_tests/vineex_condor.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/scaling_tests/vineex_local.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/scaling_tests/wqex_condor.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/scaling_tests/wqex_local.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/site_tests/__init__.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/site_tests/site_config_selector.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/site_tests/test_provider.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/site_tests/test_site.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/sites/__init__.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/sites/test_affinity.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/sites/test_concurrent.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/sites/test_dynamic_executor.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/sites/test_ec2.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/sites/test_launchers.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/sites/test_local_adhoc.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/sites/test_mpi/__init__.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/sites/test_worker_info.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_aalst_patterns.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_bash_apps/__init__.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_bash_apps/test_apptimeout.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_bash_apps/test_basic.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_bash_apps/test_error_codes.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_bash_apps/test_keyword_overlaps.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_bash_apps/test_kwarg_storage.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_bash_apps/test_memoize.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_bash_apps/test_memoize_ignore_args.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_bash_apps/test_memoize_ignore_args_regr.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_bash_apps/test_multiline.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_bash_apps/test_pipeline.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_bash_apps/test_stdout.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_callables.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_channels/__init__.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_channels/test_large_output.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_checkpointing/__init__.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_checkpointing/test_periodic.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_checkpointing/test_python_checkpoint_1.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_checkpointing/test_python_checkpoint_2.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_checkpointing/test_python_checkpoint_3.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_checkpointing/test_regression_232.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_checkpointing/test_regression_233.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_checkpointing/test_regression_239.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_checkpointing/test_task_exit.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_curvezmq.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_data/__init__.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_data/test_file.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_data/test_file_apps.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_data/test_file_staging.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_data/test_output_chain_filenames.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_docs/__init__.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_docs/test_from_slides.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_docs/test_kwargs.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_docs/test_tutorial_1.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_docs/test_workflow1.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_docs/test_workflow2.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_docs/test_workflow4.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_error_handling/__init__.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_error_handling/test_fail.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_error_handling/test_python_walltime.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_error_handling/test_rand_fail.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_error_handling/test_resource_spec.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_error_handling/test_retries.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_error_handling/test_retry_handler.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_error_handling/test_retry_handler_failure.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_error_handling/test_serialization_fail.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_error_handling/test_wrap_with_logs.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_flowcontrol/__init__.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_flux.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_htex/__init__.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_htex/test_basic.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_htex/test_connected_blocks.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_htex/test_cpu_affinity_explicit.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_htex/test_disconnected_blocks.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_htex/test_htex.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_htex/test_manager_failure.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_htex/test_missing_worker.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_htex/test_multiple_disconnected_blocks.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_htex/test_worker_failure.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_htex/test_zmq_binding.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_monitoring/__init__.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_monitoring/test_basic.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_monitoring/test_db_locks.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_monitoring/test_fuzz_zmq.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_monitoring/test_incomplete_futures.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_monitoring/test_memoization_representation.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_monitoring/test_viz_colouring.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_mpi_apps/__init__.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_mpi_apps/test_bad_mpi_config.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_mpi_apps/test_mpi_mode_disabled.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_mpi_apps/test_mpi_mode_enabled.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_mpi_apps/test_mpi_prefix.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_mpi_apps/test_mpi_scheduler.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_mpi_apps/test_resource_spec.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_providers/__init__.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_providers/test_cobalt_deprecation_warning.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_providers/test_local_provider.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_providers/test_pbspro_template.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_providers/test_slurm_instantiate.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_providers/test_slurm_template.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_providers/test_submiterror_deprecation.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_python_apps/__init__.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_python_apps/test_arg_input_types.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_python_apps/test_basic.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_python_apps/test_dep_standard_futures.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_python_apps/test_dependencies.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_python_apps/test_depfail_propagation.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_python_apps/test_fail.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_python_apps/test_fibonacci_iterative.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_python_apps/test_fibonacci_recursive.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_python_apps/test_futures.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_python_apps/test_garbage_collect.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_python_apps/test_import_fail.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_python_apps/test_join.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_python_apps/test_lifted.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_python_apps/test_mapred.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_python_apps/test_memoize_1.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_python_apps/test_memoize_2.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_python_apps/test_memoize_4.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_python_apps/test_memoize_bad_id_for_memo.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_python_apps/test_memoize_ignore_args.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_python_apps/test_memoize_joinapp.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_python_apps/test_outputs.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_python_apps/test_overview.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_python_apps/test_pipeline.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_python_apps/test_simple.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_python_apps/test_timeout.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_python_apps/test_type5.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_radical/__init__.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_radical/test_mpi_funcs.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_regression/__init__.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_regression/test_1480.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_regression/test_1606_wait_for_current_tasks.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_regression/test_1653.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_regression/test_221.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_regression/test_226.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_regression/test_2652.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_regression/test_69a.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_regression/test_854.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_regression/test_97_parallelism_0.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_regression/test_98.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_scaling/__init__.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_scaling/test_block_error_handler.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_scaling/test_regression_1621.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_scaling/test_scale_down.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_serialization/__init__.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_serialization/test_2555_caching_deserializer.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_serialization/test_basic.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_serialization/test_htex_code_cache.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_serialization/test_pack_resource_spec.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_serialization/test_proxystore_configured.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_serialization/test_proxystore_impl.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_staging/__init__.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_staging/staging_provider.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_staging/test_1316.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_staging/test_docs_1.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_staging/test_docs_2.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_staging/test_elaborate_noop_file.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_staging/test_staging_ftp.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_staging/test_staging_ftp_in_task.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_staging/test_staging_globus.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_staging/test_staging_https.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_summary.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_thread_parallelism.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_threads/__init__.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_threads/test_configs.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_threads/test_lazy_errors.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_utils/__init__.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_utils/test_representation_mixin.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/utils.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/usage_tracking/__init__.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl/utils.py +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl.egg-info/dependency_links.txt +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl.egg-info/entry_points.txt +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl.egg-info/requires.txt +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/parsl.egg-info/top_level.txt +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/requirements.txt +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/setup.cfg +0 -0
- {parsl-2024.3.4 → parsl-2024.3.11}/setup.py +0 -0
@@ -1,9 +1,9 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: parsl
|
3
|
-
Version: 2024.3.
|
3
|
+
Version: 2024.3.11
|
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.03.
|
6
|
+
Download-URL: https://github.com/Parsl/parsl/archive/2024.03.11.tar.gz
|
7
7
|
Author: The Parsl Team
|
8
8
|
Author-email: parsl@googlegroups.com
|
9
9
|
License: Apache 2.0
|
@@ -59,6 +59,10 @@ then explore the `parallel computing patterns <https://parsl.readthedocs.io/en/s
|
|
59
59
|
.. |NSF-1550528| image:: https://img.shields.io/badge/NSF-1550528-blue.svg
|
60
60
|
:target: https://nsf.gov/awardsearch/showAward?AWD_ID=1550528
|
61
61
|
:alt: NSF award info
|
62
|
+
.. |NSF-1550475| image:: https://img.shields.io/badge/NSF-1550475-blue.svg
|
63
|
+
:target: https://nsf.gov/awardsearch/showAward?AWD_ID=1550475
|
64
|
+
:alt: NSF award info
|
65
|
+
|
62
66
|
|
63
67
|
Quickstart
|
64
68
|
==========
|
@@ -81,7 +81,7 @@ def address_by_hostname() -> str:
|
|
81
81
|
def address_by_interface(ifname: str) -> str:
|
82
82
|
"""Returns the IP address of the given interface name, e.g. 'eth0'
|
83
83
|
|
84
|
-
This is
|
84
|
+
This is from a Stack Overflow answer: https://stackoverflow.com/questions/24196932/how-can-i-get-the-ip-address-of-eth0-in-python#24196955
|
85
85
|
|
86
86
|
Parameters
|
87
87
|
----------
|
@@ -95,7 +95,7 @@ class DataFlowKernel:
|
|
95
95
|
self.checkpoint_lock = threading.Lock()
|
96
96
|
|
97
97
|
self.usage_tracker = UsageTracker(self)
|
98
|
-
self.usage_tracker.
|
98
|
+
self.usage_tracker.send_start_message()
|
99
99
|
|
100
100
|
self.task_state_counts_lock = threading.Lock()
|
101
101
|
self.task_state_counts = {state: 0 for state in States}
|
@@ -722,7 +722,10 @@ class DataFlowKernel:
|
|
722
722
|
self._send_task_log_info(task_record)
|
723
723
|
|
724
724
|
if hasattr(exec_fu, "parsl_executor_task_id"):
|
725
|
-
logger.info(
|
725
|
+
logger.info(
|
726
|
+
f"Parsl task {task_id} try {try_id} launched on executor {executor.label} "
|
727
|
+
f"with executor id {exec_fu.parsl_executor_task_id}")
|
728
|
+
|
726
729
|
else:
|
727
730
|
logger.info(f"Parsl task {task_id} try {try_id} launched on executor {executor.label}")
|
728
731
|
|
@@ -730,7 +733,8 @@ class DataFlowKernel:
|
|
730
733
|
|
731
734
|
return exec_fu
|
732
735
|
|
733
|
-
def _add_input_deps(self, executor: str, args: Sequence[Any], kwargs: Dict[str, Any], func: Callable) -> Tuple[Sequence[Any], Dict[str, Any],
|
736
|
+
def _add_input_deps(self, executor: str, args: Sequence[Any], kwargs: Dict[str, Any], func: Callable) -> Tuple[Sequence[Any], Dict[str, Any],
|
737
|
+
Callable]:
|
734
738
|
"""Look for inputs of the app that are files. Give the data manager
|
735
739
|
the opportunity to replace a file with a data future for that file,
|
736
740
|
for example wrapping the result of a staging action.
|
@@ -1142,8 +1146,9 @@ class DataFlowKernel:
|
|
1142
1146
|
|
1143
1147
|
def atexit_cleanup(self) -> None:
|
1144
1148
|
if not self.cleanup_called:
|
1145
|
-
logger.
|
1146
|
-
|
1149
|
+
logger.warning("Python is exiting with a DFK still running. "
|
1150
|
+
"You should call parsl.dfk().cleanup() before "
|
1151
|
+
"exiting to release any resources")
|
1147
1152
|
else:
|
1148
1153
|
logger.info("python process is exiting, but DFK has already been cleaned up")
|
1149
1154
|
|
@@ -1200,7 +1205,7 @@ class DataFlowKernel:
|
|
1200
1205
|
self._checkpoint_timer.close()
|
1201
1206
|
|
1202
1207
|
# Send final stats
|
1203
|
-
self.usage_tracker.
|
1208
|
+
self.usage_tracker.send_end_message()
|
1204
1209
|
self.usage_tracker.close()
|
1205
1210
|
|
1206
1211
|
logger.info("Closing job status poller")
|
@@ -70,7 +70,9 @@ class TaskRecord(TypedDict, total=False):
|
|
70
70
|
# these three could be more strongly typed perhaps but I'm not thinking about that now
|
71
71
|
func: Callable
|
72
72
|
fn_hash: str
|
73
|
-
args: Sequence[Any]
|
73
|
+
args: Sequence[Any]
|
74
|
+
# in some places we uses a Tuple[Any, ...] and in some places a List[Any].
|
75
|
+
# This is an attempt to correctly type both of those.
|
74
76
|
kwargs: Dict[str, Any]
|
75
77
|
|
76
78
|
time_invoked: Optional[datetime.datetime]
|
@@ -6,6 +6,7 @@ import threading
|
|
6
6
|
import queue
|
7
7
|
import datetime
|
8
8
|
import pickle
|
9
|
+
from dataclasses import dataclass
|
9
10
|
from multiprocessing import Process, Queue
|
10
11
|
from typing import Dict, Sequence
|
11
12
|
from typing import List, Optional, Tuple, Union, Callable
|
@@ -327,7 +328,7 @@ class HighThroughputExecutor(BlockProviderExecutor, RepresentationMixin):
|
|
327
328
|
def _warn_deprecated(self, old: str, new: str):
|
328
329
|
warnings.warn(
|
329
330
|
f"{old} is deprecated and will be removed in a future release. "
|
330
|
-
"Please use {new} instead.",
|
331
|
+
f"Please use {new} instead.",
|
331
332
|
DeprecationWarning,
|
332
333
|
stacklevel=2
|
333
334
|
)
|
@@ -628,8 +629,8 @@ class HighThroughputExecutor(BlockProviderExecutor, RepresentationMixin):
|
|
628
629
|
"""Submits work to the outgoing_q.
|
629
630
|
|
630
631
|
The outgoing_q is an external process listens on this
|
631
|
-
queue for new work. This method behaves like a
|
632
|
-
|
632
|
+
queue for new work. This method behaves like a submit call as described here `Python docs: <https://docs.python.org/3/
|
633
|
+
library/concurrent.futures.html#concurrent.futures.ThreadPoolExecutor>`_
|
633
634
|
|
634
635
|
Args:
|
635
636
|
- func (callable) : Callable function
|
@@ -694,7 +695,7 @@ class HighThroughputExecutor(BlockProviderExecutor, RepresentationMixin):
|
|
694
695
|
def workers_per_node(self) -> Union[int, float]:
|
695
696
|
return self._workers_per_node
|
696
697
|
|
697
|
-
def scale_in(self, blocks, max_idletime=None):
|
698
|
+
def scale_in(self, blocks: int, max_idletime: Optional[float] = None) -> List[str]:
|
698
699
|
"""Scale in the number of active blocks by specified amount.
|
699
700
|
|
700
701
|
The scale in method here is very rude. It doesn't give the workers
|
@@ -721,25 +722,36 @@ class HighThroughputExecutor(BlockProviderExecutor, RepresentationMixin):
|
|
721
722
|
List of block IDs scaled in
|
722
723
|
"""
|
723
724
|
logger.debug(f"Scale in called, blocks={blocks}")
|
725
|
+
|
726
|
+
@dataclass
|
727
|
+
class BlockInfo:
|
728
|
+
tasks: int # sum of tasks in this block
|
729
|
+
idle: float # shortest idle time of any manager in this block
|
730
|
+
|
724
731
|
managers = self.connected_managers()
|
725
|
-
block_info = {}
|
732
|
+
block_info: Dict[str, BlockInfo] = {}
|
726
733
|
for manager in managers:
|
727
734
|
if not manager['active']:
|
728
735
|
continue
|
729
736
|
b_id = manager['block_id']
|
730
737
|
if b_id not in block_info:
|
731
|
-
block_info[b_id] =
|
732
|
-
block_info[b_id]
|
733
|
-
block_info[b_id]
|
738
|
+
block_info[b_id] = BlockInfo(tasks=0, idle=float('inf'))
|
739
|
+
block_info[b_id].tasks += manager['tasks']
|
740
|
+
block_info[b_id].idle = min(block_info[b_id].idle, manager['idle_duration'])
|
741
|
+
|
742
|
+
# The scaling policy is that longest idle blocks should be scaled down
|
743
|
+
# in preference to least idle (most recently used) blocks.
|
744
|
+
# Other policies could be implemented here.
|
745
|
+
|
746
|
+
sorted_blocks = sorted(block_info.items(), key=lambda item: (-item[1].idle, item[1].tasks))
|
734
747
|
|
735
|
-
sorted_blocks = sorted(block_info.items(), key=lambda item: (item[1][1], item[1][0]))
|
736
748
|
logger.debug(f"Scale in selecting from {len(sorted_blocks)} blocks")
|
737
749
|
if max_idletime is None:
|
738
750
|
block_ids_to_kill = [x[0] for x in sorted_blocks[:blocks]]
|
739
751
|
else:
|
740
752
|
block_ids_to_kill = []
|
741
753
|
for x in sorted_blocks:
|
742
|
-
if x[1]
|
754
|
+
if x[1].idle > max_idletime and x[1].tasks == 0:
|
743
755
|
block_ids_to_kill.append(x[0])
|
744
756
|
if len(block_ids_to_kill) == blocks:
|
745
757
|
break
|
@@ -392,7 +392,12 @@ class Interchange:
|
|
392
392
|
logger.info("Processed {} tasks in {} seconds".format(self.count, delta))
|
393
393
|
logger.warning("Exiting")
|
394
394
|
|
395
|
-
def process_task_outgoing_incoming(
|
395
|
+
def process_task_outgoing_incoming(
|
396
|
+
self,
|
397
|
+
interesting_managers: Set[bytes],
|
398
|
+
hub_channel: Optional[zmq.Socket],
|
399
|
+
kill_event: threading.Event
|
400
|
+
) -> None:
|
396
401
|
"""Process one message from manager on the task_outgoing channel.
|
397
402
|
Note that this message flow is in contradiction to the name of the
|
398
403
|
channel - it is not an outgoing message and it is not a task.
|
@@ -621,7 +626,13 @@ def start_file_logger(filename: str, level: int = logging.DEBUG, format_string:
|
|
621
626
|
None.
|
622
627
|
"""
|
623
628
|
if format_string is None:
|
624
|
-
format_string =
|
629
|
+
format_string = (
|
630
|
+
|
631
|
+
"%(asctime)s.%(msecs)03d %(name)s:%(lineno)d "
|
632
|
+
"%(processName)s(%(process)d) %(threadName)s "
|
633
|
+
"%(funcName)s [%(levelname)s] %(message)s"
|
634
|
+
|
635
|
+
)
|
625
636
|
|
626
637
|
global logger
|
627
638
|
logger = logging.getLogger(LOGGER_NAME)
|
@@ -413,7 +413,9 @@ class Manager:
|
|
413
413
|
raise WorkerLost(worker_id, platform.node())
|
414
414
|
except Exception:
|
415
415
|
logger.info("Putting exception for executor task {} in the pending result queue".format(task['task_id']))
|
416
|
-
result_package = {'type': 'result',
|
416
|
+
result_package = {'type': 'result',
|
417
|
+
'task_id': task['task_id'],
|
418
|
+
'exception': serialize(RemoteExceptionWrapper(*sys.exc_info()))}
|
417
419
|
pkl_package = pickle.dumps(result_package)
|
418
420
|
self.pending_result_queue.put(pkl_package)
|
419
421
|
except KeyError:
|
@@ -867,7 +869,10 @@ if __name__ == "__main__":
|
|
867
869
|
block_id=args.block_id,
|
868
870
|
cores_per_worker=float(args.cores_per_worker),
|
869
871
|
mem_per_worker=None if args.mem_per_worker == 'None' else float(args.mem_per_worker),
|
870
|
-
max_workers_per_node=
|
872
|
+
max_workers_per_node=(
|
873
|
+
args.max_workers_per_node if args.max_workers_per_node == float('inf')
|
874
|
+
else int(args.max_workers_per_node)
|
875
|
+
),
|
871
876
|
prefetch_capacity=int(args.prefetch_capacity),
|
872
877
|
heartbeat_threshold=int(args.hb_threshold),
|
873
878
|
heartbeat_period=int(args.hb_period),
|
@@ -228,7 +228,9 @@ class TaskVineExecutor(BlockProviderExecutor, putils.RepresentationMixin):
|
|
228
228
|
# factory logs go with manager logs regardless
|
229
229
|
self.factory_config.scratch_dir = self.manager_config.vine_log_dir
|
230
230
|
logger.debug(f"Function data directory: {self._function_data_dir}, log directory: {log_dir}")
|
231
|
-
logger.debug(
|
231
|
+
logger.debug(
|
232
|
+
f"TaskVine manager log directory: {self.manager_config.vine_log_dir}, "
|
233
|
+
f"factory log directory: {self.factory_config.scratch_dir}")
|
232
234
|
|
233
235
|
def start(self):
|
234
236
|
"""Create submit process and collector thread to create, send, and
|
@@ -245,7 +245,8 @@ class Strategy:
|
|
245
245
|
exec_status.scale_in(active_blocks - min_blocks)
|
246
246
|
|
247
247
|
else:
|
248
|
-
logger.debug(
|
248
|
+
logger.debug(
|
249
|
+
f"Idle time {idle_duration}s is less than max_idletime {self.max_idletime}s for executor {label}; not scaling in")
|
249
250
|
|
250
251
|
# Case 2
|
251
252
|
# More tasks than the available slots.
|
@@ -103,7 +103,13 @@ class Database:
|
|
103
103
|
def rollback(self) -> None:
|
104
104
|
self.session.rollback()
|
105
105
|
|
106
|
-
def _generate_mappings(
|
106
|
+
def _generate_mappings(
|
107
|
+
self,
|
108
|
+
table: Table,
|
109
|
+
columns: Optional[List[str]] = None,
|
110
|
+
messages: List[MonitoringMessage] = [],
|
111
|
+
) -> List[Dict[str, Any]]:
|
112
|
+
|
107
113
|
mappings = []
|
108
114
|
for msg in messages:
|
109
115
|
m = {}
|
@@ -250,6 +256,12 @@ class Database:
|
|
250
256
|
'psutil_process_disk_write', Float, nullable=True)
|
251
257
|
psutil_process_status = Column(
|
252
258
|
'psutil_process_status', Text, nullable=True)
|
259
|
+
psutil_cpu_num = Column(
|
260
|
+
'psutil_cpu_num', Text, nullable=True)
|
261
|
+
psutil_process_num_ctx_switches_voluntary = Column(
|
262
|
+
'psutil_process_num_ctx_switches_voluntary', Float, nullable=True)
|
263
|
+
psutil_process_num_ctx_switches_involuntary = Column(
|
264
|
+
'psutil_process_num_ctx_switches_involuntary', Float, nullable=True)
|
253
265
|
__table_args__ = (
|
254
266
|
PrimaryKeyConstraint('try_id', 'task_id', 'run_id', 'timestamp'),
|
255
267
|
)
|
@@ -518,7 +530,10 @@ class DatabaseManager:
|
|
518
530
|
reprocessable_first_resource_messages.append(msg)
|
519
531
|
else:
|
520
532
|
if task_try_id in deferred_resource_messages:
|
521
|
-
logger.error(
|
533
|
+
logger.error(
|
534
|
+
"Task {} already has a deferred resource message. "
|
535
|
+
"Discarding previous message.".format(msg['task_id'])
|
536
|
+
)
|
522
537
|
deferred_resource_messages[task_try_id] = msg
|
523
538
|
elif msg['last_msg']:
|
524
539
|
# This assumes that the primary key has been added
|
@@ -544,7 +559,10 @@ class DatabaseManager:
|
|
544
559
|
if reprocessable_last_resource_messages:
|
545
560
|
self._insert(table=STATUS, messages=reprocessable_last_resource_messages)
|
546
561
|
except Exception:
|
547
|
-
logger.exception(
|
562
|
+
logger.exception(
|
563
|
+
"Exception in db loop: this might have been a malformed message, "
|
564
|
+
"or some other error. monitoring data may have been lost"
|
565
|
+
)
|
548
566
|
exception_happened = True
|
549
567
|
if exception_happened:
|
550
568
|
raise RuntimeError("An exception happened sometime during database processing and should have been logged in database_manager.log")
|
@@ -571,8 +589,10 @@ class DatabaseManager:
|
|
571
589
|
self._dispatch_to_internal(x)
|
572
590
|
elif queue_tag == 'resource':
|
573
591
|
assert isinstance(x, tuple), "_migrate_logs_to_internal was expecting a tuple, got {}".format(x)
|
574
|
-
assert x[0] == MessageType.RESOURCE_INFO,
|
575
|
-
"_migrate_logs_to_internal can only migrate RESOURCE_INFO message from resource queue,
|
592
|
+
assert x[0] == MessageType.RESOURCE_INFO, (
|
593
|
+
"_migrate_logs_to_internal can only migrate RESOURCE_INFO message from resource queue, "
|
594
|
+
"got tag {}, message {}".format(x[0], x)
|
595
|
+
)
|
576
596
|
self._dispatch_to_internal(x)
|
577
597
|
elif queue_tag == 'node':
|
578
598
|
assert len(x) == 2, "expected message tuple to have exactly two elements"
|
@@ -290,8 +290,12 @@ class MonitoringHub(RepresentationMixin):
|
|
290
290
|
self._dfk_channel.close()
|
291
291
|
if exception_msgs:
|
292
292
|
for exception_msg in exception_msgs:
|
293
|
-
self.logger.error(
|
294
|
-
|
293
|
+
self.logger.error(
|
294
|
+
"{} process delivered an exception: {}. Terminating all monitoring processes immediately.".format(
|
295
|
+
exception_msg[0],
|
296
|
+
exception_msg[1]
|
297
|
+
)
|
298
|
+
)
|
295
299
|
self.router_proc.terminate()
|
296
300
|
self.dbm_proc.terminate()
|
297
301
|
self.filesystem_proc.terminate()
|
@@ -201,6 +201,8 @@ def monitor(pid: int,
|
|
201
201
|
|
202
202
|
children_user_time = {} # type: Dict[int, float]
|
203
203
|
children_system_time = {} # type: Dict[int, float]
|
204
|
+
children_num_ctx_switches_voluntary = {} # type: Dict[int, float]
|
205
|
+
children_num_ctx_switches_involuntary = {} # type: Dict[int, float]
|
204
206
|
|
205
207
|
def accumulate_and_prepare() -> Dict[str, Any]:
|
206
208
|
d = {"psutil_process_" + str(k): v for k, v in pm.as_dict().items() if k in simple}
|
@@ -218,6 +220,15 @@ def monitor(pid: int,
|
|
218
220
|
logging.debug("got children")
|
219
221
|
|
220
222
|
d["psutil_cpu_count"] = psutil.cpu_count()
|
223
|
+
|
224
|
+
# note that this will be the CPU number of the base process, not anything launched by it
|
225
|
+
d["psutil_cpu_num"] = pm.cpu_num()
|
226
|
+
|
227
|
+
pctxsw = pm.num_ctx_switches()
|
228
|
+
|
229
|
+
d["psutil_process_num_ctx_switches_voluntary"] = pctxsw.voluntary
|
230
|
+
d["psutil_process_num_ctx_switches_involuntary"] = pctxsw.involuntary
|
231
|
+
|
221
232
|
d['psutil_process_memory_virtual'] = pm.memory_info().vms
|
222
233
|
d['psutil_process_memory_resident'] = pm.memory_info().rss
|
223
234
|
d['psutil_process_time_user'] = pm.cpu_times().user
|
@@ -238,6 +249,11 @@ def monitor(pid: int,
|
|
238
249
|
child_system_time = child.cpu_times().system
|
239
250
|
children_user_time[child.pid] = child_user_time
|
240
251
|
children_system_time[child.pid] = child_system_time
|
252
|
+
|
253
|
+
pctxsw = child.num_ctx_switches()
|
254
|
+
children_num_ctx_switches_voluntary[child.pid] = pctxsw.voluntary
|
255
|
+
children_num_ctx_switches_involuntary[child.pid] = pctxsw.involuntary
|
256
|
+
|
241
257
|
d['psutil_process_memory_virtual'] += child.memory_info().vms
|
242
258
|
d['psutil_process_memory_resident'] += child.memory_info().rss
|
243
259
|
try:
|
@@ -248,14 +264,27 @@ def monitor(pid: int,
|
|
248
264
|
logging.exception("Exception reading IO counters for child {k}. Recorded IO usage may be incomplete".format(k=k), exc_info=True)
|
249
265
|
d['psutil_process_disk_write'] += 0
|
250
266
|
d['psutil_process_disk_read'] += 0
|
267
|
+
|
251
268
|
total_children_user_time = 0.0
|
252
269
|
for child_pid in children_user_time:
|
253
270
|
total_children_user_time += children_user_time[child_pid]
|
271
|
+
|
254
272
|
total_children_system_time = 0.0
|
255
273
|
for child_pid in children_system_time:
|
256
274
|
total_children_system_time += children_system_time[child_pid]
|
275
|
+
|
276
|
+
total_children_num_ctx_switches_voluntary = 0.0
|
277
|
+
for child_pid in children_num_ctx_switches_voluntary:
|
278
|
+
total_children_num_ctx_switches_voluntary += children_num_ctx_switches_voluntary[child_pid]
|
279
|
+
|
280
|
+
total_children_num_ctx_switches_involuntary = 0.0
|
281
|
+
for child_pid in children_num_ctx_switches_involuntary:
|
282
|
+
total_children_num_ctx_switches_involuntary += children_num_ctx_switches_involuntary[child_pid]
|
283
|
+
|
257
284
|
d['psutil_process_time_user'] += total_children_user_time
|
258
285
|
d['psutil_process_time_system'] += total_children_system_time
|
286
|
+
d['psutil_process_num_ctx_switches_voluntary'] += total_children_num_ctx_switches_voluntary
|
287
|
+
d['psutil_process_num_ctx_switches_involuntary'] += total_children_num_ctx_switches_involuntary
|
259
288
|
logging.debug("sending message")
|
260
289
|
return d
|
261
290
|
|
@@ -102,5 +102,12 @@ class Resource(db.Model):
|
|
102
102
|
'psutil_process_disk_write', db.Float, nullable=True)
|
103
103
|
psutil_process_status = db.Column(
|
104
104
|
'psutil_process_status', db.Text, nullable=True)
|
105
|
+
psutil_cpu_num = db.Column(
|
106
|
+
'psutil_cpu_num', db.Text, nullable=True)
|
107
|
+
psutil_process_num_ctx_switches_voluntary = db.Column(
|
108
|
+
'psutil_process_num_ctx_switches_voluntary', db.Float, nullable=True)
|
109
|
+
psutil_process_num_ctx_switches_involuntary = db.Column(
|
110
|
+
'psutil_process_num_ctx_switches_involuntary', db.Float, nullable=True)
|
111
|
+
|
105
112
|
__table_args__ = (
|
106
113
|
db.PrimaryKeyConstraint('task_id', 'run_id', 'timestamp'),)
|
@@ -280,11 +280,22 @@ class SlurmProvider(ClusterProvider, RepresentationMixin):
|
|
280
280
|
else:
|
281
281
|
logger.error("Could not read job ID from submit command standard output.")
|
282
282
|
logger.error("Retcode:%s STDOUT:%s STDERR:%s", retcode, stdout.strip(), stderr.strip())
|
283
|
-
raise SubmitException(
|
283
|
+
raise SubmitException(
|
284
|
+
job_name,
|
285
|
+
"Could not read job ID from submit command standard output",
|
286
|
+
stdout=stdout,
|
287
|
+
stderr=stderr,
|
288
|
+
retcode=retcode
|
289
|
+
)
|
284
290
|
else:
|
285
291
|
logger.error("Submit command failed")
|
286
292
|
logger.error("Retcode:%s STDOUT:%s STDERR:%s", retcode, stdout.strip(), stderr.strip())
|
287
|
-
raise SubmitException(
|
293
|
+
raise SubmitException(
|
294
|
+
job_name, "Could not read job ID from submit command standard output",
|
295
|
+
stdout=stdout,
|
296
|
+
stderr=stderr,
|
297
|
+
retcode=retcode
|
298
|
+
)
|
288
299
|
|
289
300
|
def cancel(self, job_ids):
|
290
301
|
''' Cancels the jobs specified by a list of job ids
|
@@ -52,7 +52,9 @@ user_opts = {
|
|
52
52
|
# 'username': MIDWAY_USERNAME,
|
53
53
|
# 'script_dir': '/scratch/midway2/{}/parsl_scripts'.format(MIDWAY_USERNAME),
|
54
54
|
# 'scheduler_options': "",
|
55
|
-
# 'worker_init': 'cd /scratch/midway2/{}/parsl_scripts;
|
55
|
+
# 'worker_init': 'cd /scratch/midway2/{}/parsl_scripts; '
|
56
|
+
# 'module load Anaconda3/5.1.0; source activate parsl_testing;'
|
57
|
+
# .format(MIDWAY_USERNAME),
|
56
58
|
# },
|
57
59
|
# 'osg': {
|
58
60
|
# 'username': OSG_USERNAME,
|
{parsl-2024.3.4 → parsl-2024.3.11}/parsl/tests/test_scaling/test_scale_down_htex_auto_scale.py
RENAMED
@@ -98,7 +98,8 @@ def test_scale_out(tmpd_cwd, try_assert):
|
|
98
98
|
|
99
99
|
assert dfk.executors['htex_local'].outstanding == 0
|
100
100
|
|
101
|
-
# now we can launch one "long" task -
|
101
|
+
# now we can launch one "long" task -
|
102
|
+
# and what should happen is that the connected_managers count "eventually" (?) converges to 1 and stays there.
|
102
103
|
|
103
104
|
finish_path = tmpd_cwd / "stage2_workers_may_continue"
|
104
105
|
|
@@ -109,7 +109,6 @@ class UsageTracker:
|
|
109
109
|
sys.version_info.micro)
|
110
110
|
self.tracking_enabled = self.check_tracking_enabled()
|
111
111
|
logger.debug("Tracking status: {}".format(self.tracking_enabled))
|
112
|
-
self.initialized = False # Once first message is sent this will be True
|
113
112
|
|
114
113
|
def check_tracking_enabled(self):
|
115
114
|
"""Check if tracking is enabled.
|
@@ -176,15 +175,12 @@ class UsageTracker:
|
|
176
175
|
except Exception as e:
|
177
176
|
logger.debug("Usage tracking failed: {}".format(e))
|
178
177
|
|
179
|
-
def
|
180
|
-
|
181
|
-
|
182
|
-
if not self.initialized:
|
183
|
-
message = self.construct_start_message()
|
184
|
-
self.initialized = True
|
185
|
-
else:
|
186
|
-
message = self.construct_end_message()
|
178
|
+
def send_start_message(self) -> None:
|
179
|
+
message = self.construct_start_message()
|
180
|
+
self.send_UDP_message(message)
|
187
181
|
|
182
|
+
def send_end_message(self) -> None:
|
183
|
+
message = self.construct_end_message()
|
188
184
|
self.send_UDP_message(message)
|
189
185
|
|
190
186
|
def close(self, timeout: float = 10.0) -> None:
|
@@ -1,9 +1,9 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: parsl
|
3
|
-
Version: 2024.3.
|
3
|
+
Version: 2024.3.11
|
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.03.
|
6
|
+
Download-URL: https://github.com/Parsl/parsl/archive/2024.03.11.tar.gz
|
7
7
|
Author: The Parsl Team
|
8
8
|
Author-email: parsl@googlegroups.com
|
9
9
|
License: Apache 2.0
|
@@ -1,28 +0,0 @@
|
|
1
|
-
from parsl.config import Config
|
2
|
-
from parsl.executors import HighThroughputExecutor
|
3
|
-
from parsl.launchers import AprunLauncher
|
4
|
-
from parsl.providers import TorqueProvider
|
5
|
-
|
6
|
-
|
7
|
-
config = Config(
|
8
|
-
executors=[
|
9
|
-
HighThroughputExecutor(
|
10
|
-
label="bw_htex",
|
11
|
-
cores_per_worker=1,
|
12
|
-
worker_debug=False,
|
13
|
-
provider=TorqueProvider(
|
14
|
-
queue='normal',
|
15
|
-
launcher=AprunLauncher(overrides="-b -- bwpy-environ --"),
|
16
|
-
scheduler_options='', # string to prepend to #SBATCH blocks in the submit script to the scheduler
|
17
|
-
worker_init='', # command to run before starting a worker, such as 'source activate env'
|
18
|
-
init_blocks=1,
|
19
|
-
max_blocks=1,
|
20
|
-
min_blocks=1,
|
21
|
-
nodes_per_block=2,
|
22
|
-
walltime='00:10:00'
|
23
|
-
),
|
24
|
-
)
|
25
|
-
|
26
|
-
],
|
27
|
-
|
28
|
-
)
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|