parsl 2024.3.11__py3-none-any.whl → 2025.1.13__py3-none-any.whl
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/__init__.py +9 -10
- parsl/addresses.py +29 -7
- parsl/app/app.py +7 -8
- parsl/app/bash.py +15 -8
- parsl/app/errors.py +10 -13
- parsl/app/futures.py +8 -10
- parsl/app/python.py +2 -1
- parsl/benchmark/perf.py +2 -1
- parsl/concurrent/__init__.py +2 -2
- parsl/config.py +57 -10
- parsl/configs/ASPIRE1.py +6 -5
- parsl/configs/Azure.py +9 -8
- parsl/configs/bridges.py +6 -4
- parsl/configs/cc_in2p3.py +3 -3
- parsl/configs/ec2.py +3 -1
- parsl/configs/expanse.py +4 -3
- parsl/configs/frontera.py +3 -4
- parsl/configs/htex_local.py +3 -4
- parsl/configs/illinoiscluster.py +3 -1
- parsl/configs/improv.py +34 -0
- parsl/configs/kubernetes.py +4 -3
- parsl/configs/local_threads.py +5 -1
- parsl/configs/midway.py +5 -3
- parsl/configs/osg.py +4 -2
- parsl/configs/polaris.py +4 -2
- parsl/configs/stampede2.py +6 -5
- parsl/configs/summit.py +3 -3
- parsl/configs/toss3_llnl.py +4 -3
- parsl/configs/vineex_local.py +6 -4
- parsl/configs/wqex_local.py +5 -3
- parsl/curvezmq.py +4 -0
- parsl/data_provider/data_manager.py +4 -3
- parsl/data_provider/file_noop.py +1 -2
- parsl/data_provider/files.py +3 -3
- parsl/data_provider/ftp.py +1 -3
- parsl/data_provider/globus.py +7 -6
- parsl/data_provider/http.py +2 -2
- parsl/data_provider/rsync.py +1 -1
- parsl/data_provider/staging.py +2 -2
- parsl/data_provider/zip.py +135 -0
- parsl/dataflow/dependency_resolvers.py +115 -0
- parsl/dataflow/dflow.py +262 -224
- parsl/dataflow/errors.py +3 -5
- parsl/dataflow/futures.py +27 -14
- parsl/dataflow/memoization.py +5 -5
- parsl/dataflow/rundirs.py +5 -6
- parsl/dataflow/taskrecord.py +4 -5
- parsl/executors/__init__.py +4 -2
- parsl/executors/base.py +45 -15
- parsl/executors/errors.py +13 -0
- parsl/executors/execute_task.py +37 -0
- parsl/executors/flux/execute_parsl_task.py +3 -3
- parsl/executors/flux/executor.py +18 -19
- parsl/executors/flux/flux_instance_manager.py +26 -27
- parsl/executors/high_throughput/errors.py +43 -3
- parsl/executors/high_throughput/executor.py +316 -282
- parsl/executors/high_throughput/interchange.py +158 -167
- parsl/executors/high_throughput/manager_record.py +5 -0
- parsl/executors/high_throughput/manager_selector.py +55 -0
- parsl/executors/high_throughput/monitoring_info.py +2 -1
- parsl/executors/high_throughput/mpi_executor.py +113 -0
- parsl/executors/high_throughput/mpi_prefix_composer.py +10 -11
- parsl/executors/high_throughput/mpi_resource_management.py +6 -17
- parsl/executors/high_throughput/probe.py +9 -7
- parsl/executors/high_throughput/process_worker_pool.py +115 -77
- parsl/executors/high_throughput/zmq_pipes.py +81 -23
- parsl/executors/radical/executor.py +130 -79
- parsl/executors/radical/rpex_resources.py +17 -15
- parsl/executors/radical/rpex_worker.py +4 -3
- parsl/executors/status_handling.py +157 -51
- parsl/executors/taskvine/__init__.py +1 -1
- parsl/executors/taskvine/errors.py +1 -1
- parsl/executors/taskvine/exec_parsl_function.py +2 -2
- parsl/executors/taskvine/executor.py +41 -57
- parsl/executors/taskvine/factory.py +1 -1
- parsl/executors/taskvine/factory_config.py +1 -1
- parsl/executors/taskvine/manager.py +18 -13
- parsl/executors/taskvine/manager_config.py +9 -5
- parsl/executors/threads.py +6 -6
- parsl/executors/workqueue/errors.py +1 -1
- parsl/executors/workqueue/exec_parsl_function.py +6 -5
- parsl/executors/workqueue/executor.py +64 -63
- parsl/executors/workqueue/parsl_coprocess.py +1 -1
- parsl/jobs/error_handlers.py +2 -2
- parsl/jobs/job_status_poller.py +30 -113
- parsl/jobs/states.py +7 -2
- parsl/jobs/strategy.py +43 -31
- parsl/launchers/__init__.py +12 -3
- parsl/launchers/errors.py +1 -1
- parsl/launchers/launchers.py +6 -12
- parsl/log_utils.py +9 -6
- parsl/monitoring/db_manager.py +59 -95
- parsl/monitoring/errors.py +6 -0
- parsl/monitoring/monitoring.py +87 -356
- parsl/monitoring/queries/pandas.py +1 -2
- parsl/monitoring/radios/base.py +13 -0
- parsl/monitoring/radios/filesystem.py +52 -0
- parsl/monitoring/radios/htex.py +57 -0
- parsl/monitoring/radios/multiprocessing.py +17 -0
- parsl/monitoring/radios/udp.py +56 -0
- parsl/monitoring/radios/zmq.py +17 -0
- parsl/monitoring/remote.py +33 -37
- parsl/monitoring/router.py +212 -0
- parsl/monitoring/types.py +5 -6
- parsl/monitoring/visualization/app.py +4 -2
- parsl/monitoring/visualization/models.py +0 -1
- parsl/monitoring/visualization/plots/default/workflow_plots.py +11 -4
- parsl/monitoring/visualization/plots/default/workflow_resource_plots.py +1 -0
- parsl/monitoring/visualization/utils.py +0 -1
- parsl/monitoring/visualization/views.py +16 -8
- parsl/multiprocessing.py +0 -1
- parsl/process_loggers.py +1 -2
- parsl/providers/__init__.py +8 -17
- parsl/providers/aws/aws.py +2 -3
- parsl/providers/azure/azure.py +4 -5
- parsl/providers/base.py +2 -18
- parsl/providers/cluster_provider.py +4 -12
- parsl/providers/condor/condor.py +7 -17
- parsl/providers/errors.py +2 -2
- parsl/providers/googlecloud/googlecloud.py +2 -1
- parsl/providers/grid_engine/grid_engine.py +5 -14
- parsl/providers/kubernetes/kube.py +80 -40
- parsl/providers/local/local.py +13 -26
- parsl/providers/lsf/lsf.py +5 -23
- parsl/providers/pbspro/pbspro.py +5 -17
- parsl/providers/slurm/slurm.py +81 -39
- parsl/providers/torque/torque.py +3 -14
- parsl/serialize/__init__.py +8 -3
- parsl/serialize/base.py +1 -2
- parsl/serialize/concretes.py +5 -4
- parsl/serialize/facade.py +3 -3
- parsl/serialize/proxystore.py +3 -2
- parsl/tests/__init__.py +1 -1
- parsl/tests/configs/azure_single_node.py +4 -5
- parsl/tests/configs/bridges.py +3 -2
- parsl/tests/configs/cc_in2p3.py +1 -3
- parsl/tests/configs/comet.py +2 -1
- parsl/tests/configs/ec2_single_node.py +1 -2
- parsl/tests/configs/ec2_spot.py +1 -2
- parsl/tests/configs/flux_local.py +11 -0
- parsl/tests/configs/frontera.py +2 -3
- parsl/tests/configs/htex_local.py +3 -5
- parsl/tests/configs/htex_local_alternate.py +11 -15
- parsl/tests/configs/htex_local_intask_staging.py +5 -9
- parsl/tests/configs/htex_local_rsync_staging.py +4 -8
- parsl/tests/configs/local_radical.py +1 -3
- parsl/tests/configs/local_radical_mpi.py +2 -2
- parsl/tests/configs/local_threads_checkpoint_periodic.py +8 -10
- parsl/tests/configs/local_threads_monitoring.py +0 -1
- parsl/tests/configs/midway.py +2 -2
- parsl/tests/configs/nscc_singapore.py +3 -3
- parsl/tests/configs/osg_htex.py +1 -1
- parsl/tests/configs/petrelkube.py +3 -2
- parsl/tests/configs/slurm_local.py +24 -0
- parsl/tests/configs/summit.py +1 -0
- parsl/tests/configs/taskvine_ex.py +4 -7
- parsl/tests/configs/user_opts.py +2 -8
- parsl/tests/configs/workqueue_ex.py +4 -6
- parsl/tests/conftest.py +27 -13
- parsl/tests/integration/test_stress/test_python_simple.py +3 -4
- parsl/tests/integration/test_stress/test_python_threads.py +3 -5
- parsl/tests/manual_tests/htex_local.py +4 -6
- parsl/tests/manual_tests/test_basic.py +1 -0
- parsl/tests/manual_tests/test_log_filter.py +3 -1
- parsl/tests/manual_tests/test_memory_limits.py +6 -8
- parsl/tests/manual_tests/test_regression_220.py +2 -1
- parsl/tests/manual_tests/test_udp_simple.py +4 -4
- parsl/tests/manual_tests/test_worker_count.py +3 -2
- parsl/tests/scaling_tests/htex_local.py +2 -4
- parsl/tests/scaling_tests/test_scale.py +0 -9
- parsl/tests/scaling_tests/vineex_condor.py +1 -2
- parsl/tests/scaling_tests/vineex_local.py +1 -2
- parsl/tests/site_tests/site_config_selector.py +1 -6
- parsl/tests/site_tests/test_provider.py +4 -2
- parsl/tests/site_tests/test_site.py +2 -0
- parsl/tests/sites/test_affinity.py +7 -7
- parsl/tests/sites/test_dynamic_executor.py +3 -4
- parsl/tests/sites/test_ec2.py +3 -2
- parsl/tests/sites/test_worker_info.py +4 -5
- parsl/tests/test_aalst_patterns.py +0 -1
- parsl/tests/test_bash_apps/test_apptimeout.py +2 -2
- parsl/tests/test_bash_apps/test_basic.py +10 -4
- parsl/tests/test_bash_apps/test_error_codes.py +5 -7
- parsl/tests/test_bash_apps/test_inputs_default.py +25 -0
- parsl/tests/test_bash_apps/test_kwarg_storage.py +1 -1
- parsl/tests/test_bash_apps/test_memoize.py +2 -8
- parsl/tests/test_bash_apps/test_memoize_ignore_args.py +9 -14
- parsl/tests/test_bash_apps/test_memoize_ignore_args_regr.py +9 -14
- parsl/tests/test_bash_apps/test_multiline.py +1 -1
- parsl/tests/test_bash_apps/test_pipeline.py +1 -1
- parsl/tests/test_bash_apps/test_std_uri.py +123 -0
- parsl/tests/test_bash_apps/test_stdout.py +33 -8
- parsl/tests/test_callables.py +2 -2
- parsl/tests/test_checkpointing/test_periodic.py +21 -39
- parsl/tests/test_checkpointing/test_python_checkpoint_1.py +1 -0
- parsl/tests/test_checkpointing/test_python_checkpoint_2.py +2 -2
- parsl/tests/test_checkpointing/test_python_checkpoint_3.py +0 -1
- parsl/tests/test_checkpointing/test_regression_239.py +1 -1
- parsl/tests/test_checkpointing/test_task_exit.py +2 -3
- parsl/tests/test_docs/test_from_slides.py +5 -2
- parsl/tests/test_docs/test_kwargs.py +4 -1
- parsl/tests/test_docs/test_tutorial_1.py +1 -2
- parsl/tests/test_docs/test_workflow1.py +2 -2
- parsl/tests/test_docs/test_workflow2.py +0 -1
- parsl/tests/test_error_handling/test_rand_fail.py +2 -2
- parsl/tests/test_error_handling/test_resource_spec.py +10 -12
- parsl/tests/test_error_handling/test_retries.py +6 -16
- parsl/tests/test_error_handling/test_retry_handler.py +1 -0
- parsl/tests/test_error_handling/test_retry_handler_failure.py +2 -1
- parsl/tests/test_error_handling/test_serialization_fail.py +1 -1
- parsl/tests/test_error_handling/test_wrap_with_logs.py +1 -0
- parsl/tests/test_execute_task.py +29 -0
- parsl/tests/test_flux.py +1 -1
- parsl/tests/test_htex/test_basic.py +2 -3
- parsl/tests/test_htex/test_block_manager_selector_unit.py +20 -0
- parsl/tests/test_htex/test_command_client_timeout.py +66 -0
- parsl/tests/test_htex/test_connected_blocks.py +3 -2
- parsl/tests/test_htex/test_cpu_affinity_explicit.py +6 -10
- parsl/tests/test_htex/test_disconnected_blocks.py +6 -5
- parsl/tests/test_htex/test_disconnected_blocks_failing_provider.py +71 -0
- parsl/tests/test_htex/test_drain.py +79 -0
- parsl/tests/test_htex/test_htex.py +51 -25
- parsl/tests/test_htex/test_manager_failure.py +0 -1
- parsl/tests/test_htex/test_manager_selector_by_block.py +51 -0
- parsl/tests/test_htex/test_managers_command.py +36 -0
- parsl/tests/test_htex/test_missing_worker.py +2 -12
- parsl/tests/test_htex/test_multiple_disconnected_blocks.py +9 -9
- parsl/tests/test_htex/test_resource_spec_validation.py +45 -0
- parsl/tests/test_htex/test_zmq_binding.py +29 -8
- parsl/tests/test_monitoring/test_app_names.py +86 -0
- parsl/tests/test_monitoring/test_basic.py +73 -25
- parsl/tests/test_monitoring/test_db_locks.py +6 -4
- parsl/tests/test_monitoring/test_fuzz_zmq.py +19 -8
- parsl/tests/test_monitoring/test_htex_init_blocks_vs_monitoring.py +80 -0
- parsl/tests/test_monitoring/test_incomplete_futures.py +5 -4
- parsl/tests/test_monitoring/test_memoization_representation.py +4 -2
- parsl/tests/test_monitoring/test_stdouterr.py +134 -0
- parsl/tests/test_monitoring/test_viz_colouring.py +1 -0
- parsl/tests/test_mpi_apps/test_bad_mpi_config.py +33 -26
- parsl/tests/test_mpi_apps/test_mpi_mode_enabled.py +28 -11
- parsl/tests/test_mpi_apps/test_mpi_prefix.py +4 -4
- parsl/tests/test_mpi_apps/test_mpi_scheduler.py +7 -2
- parsl/tests/test_mpi_apps/test_mpiex.py +64 -0
- parsl/tests/test_mpi_apps/test_resource_spec.py +42 -49
- parsl/tests/test_providers/test_kubernetes_provider.py +102 -0
- parsl/tests/test_providers/test_local_provider.py +3 -132
- parsl/tests/test_providers/test_pbspro_template.py +2 -3
- parsl/tests/test_providers/test_slurm_template.py +2 -3
- parsl/tests/test_providers/test_submiterror_deprecation.py +2 -1
- parsl/tests/test_python_apps/test_context_manager.py +128 -0
- parsl/tests/test_python_apps/test_dep_standard_futures.py +2 -1
- parsl/tests/test_python_apps/test_dependencies_deep.py +59 -0
- parsl/tests/test_python_apps/test_fail.py +0 -25
- parsl/tests/test_python_apps/test_futures.py +2 -1
- parsl/tests/test_python_apps/test_inputs_default.py +22 -0
- parsl/tests/test_python_apps/test_join.py +0 -1
- parsl/tests/test_python_apps/test_lifted.py +11 -7
- parsl/tests/test_python_apps/test_memoize_bad_id_for_memo.py +1 -0
- parsl/tests/test_python_apps/test_outputs.py +1 -1
- parsl/tests/test_python_apps/test_pluggable_future_resolution.py +161 -0
- parsl/tests/test_radical/test_mpi_funcs.py +1 -2
- parsl/tests/test_regression/test_1480.py +2 -1
- parsl/tests/test_regression/test_1653.py +2 -1
- parsl/tests/test_regression/test_226.py +1 -0
- parsl/tests/test_regression/test_2652.py +1 -0
- parsl/tests/test_regression/test_69a.py +0 -1
- parsl/tests/test_regression/test_854.py +4 -2
- parsl/tests/test_regression/test_97_parallelism_0.py +1 -2
- parsl/tests/test_regression/test_98.py +0 -1
- parsl/tests/test_scaling/test_block_error_handler.py +9 -4
- parsl/tests/test_scaling/test_regression_1621.py +11 -15
- parsl/tests/test_scaling/test_regression_3568_scaledown_vs_MISSING.py +84 -0
- parsl/tests/test_scaling/test_regression_3696_oscillation.py +103 -0
- parsl/tests/test_scaling/test_scale_down.py +2 -5
- parsl/tests/test_scaling/test_scale_down_htex_auto_scale.py +6 -18
- parsl/tests/test_scaling/test_scale_down_htex_unregistered.py +71 -0
- parsl/tests/test_scaling/test_shutdown_scalein.py +73 -0
- parsl/tests/test_scaling/test_worker_interchange_bad_messages_3262.py +90 -0
- parsl/tests/test_serialization/test_2555_caching_deserializer.py +1 -1
- parsl/tests/test_serialization/test_3495_deserialize_managerlost.py +47 -0
- parsl/tests/test_serialization/test_basic.py +2 -1
- parsl/tests/test_serialization/test_htex_code_cache.py +3 -4
- parsl/tests/test_serialization/test_pack_resource_spec.py +2 -1
- parsl/tests/test_serialization/test_proxystore_configured.py +10 -6
- parsl/tests/test_serialization/test_proxystore_impl.py +5 -3
- parsl/tests/test_shutdown/test_kill_monitoring.py +64 -0
- parsl/tests/test_staging/staging_provider.py +2 -2
- parsl/tests/test_staging/test_1316.py +3 -4
- parsl/tests/test_staging/test_docs_1.py +2 -1
- parsl/tests/test_staging/test_docs_2.py +2 -1
- parsl/tests/test_staging/test_elaborate_noop_file.py +2 -3
- parsl/tests/{test_data → test_staging}/test_file.py +6 -6
- parsl/tests/{test_data → test_staging}/test_output_chain_filenames.py +3 -0
- parsl/tests/test_staging/test_staging_ftp.py +1 -0
- parsl/tests/test_staging/test_staging_https.py +5 -2
- parsl/tests/test_staging/test_staging_stdout.py +64 -0
- parsl/tests/test_staging/test_zip_in.py +39 -0
- parsl/tests/test_staging/test_zip_out.py +110 -0
- parsl/tests/test_staging/test_zip_to_zip.py +41 -0
- parsl/tests/test_summary.py +2 -2
- parsl/tests/test_thread_parallelism.py +0 -1
- parsl/tests/test_threads/test_configs.py +1 -2
- parsl/tests/test_threads/test_lazy_errors.py +2 -2
- parsl/tests/test_utils/test_execute_wait.py +35 -0
- parsl/tests/test_utils/test_sanitize_dns.py +76 -0
- parsl/tests/unit/test_address.py +20 -0
- parsl/tests/unit/test_file.py +99 -0
- parsl/tests/unit/test_usage_tracking.py +66 -0
- parsl/usage_tracking/api.py +65 -0
- parsl/usage_tracking/levels.py +6 -0
- parsl/usage_tracking/usage.py +104 -62
- parsl/utils.py +139 -6
- parsl/version.py +1 -1
- {parsl-2024.3.11.data → parsl-2025.1.13.data}/scripts/exec_parsl_function.py +6 -5
- parsl-2025.1.13.data/scripts/interchange.py +649 -0
- {parsl-2024.3.11.data → parsl-2025.1.13.data}/scripts/process_worker_pool.py +115 -77
- parsl-2025.1.13.dist-info/METADATA +96 -0
- parsl-2025.1.13.dist-info/RECORD +462 -0
- {parsl-2024.3.11.dist-info → parsl-2025.1.13.dist-info}/WHEEL +1 -1
- parsl/channels/__init__.py +0 -7
- parsl/channels/base.py +0 -141
- parsl/channels/errors.py +0 -113
- parsl/channels/local/local.py +0 -164
- parsl/channels/oauth_ssh/oauth_ssh.py +0 -110
- parsl/channels/ssh/ssh.py +0 -276
- parsl/channels/ssh_il/__init__.py +0 -0
- parsl/channels/ssh_il/ssh_il.py +0 -74
- parsl/configs/ad_hoc.py +0 -35
- parsl/executors/radical/rpex_master.py +0 -42
- parsl/monitoring/radios.py +0 -175
- parsl/providers/ad_hoc/__init__.py +0 -0
- parsl/providers/ad_hoc/ad_hoc.py +0 -248
- parsl/providers/cobalt/__init__.py +0 -0
- parsl/providers/cobalt/cobalt.py +0 -236
- parsl/providers/cobalt/template.py +0 -17
- parsl/tests/configs/ad_hoc_cluster_htex.py +0 -35
- parsl/tests/configs/cooley_htex.py +0 -37
- parsl/tests/configs/htex_ad_hoc_cluster.py +0 -28
- parsl/tests/configs/local_adhoc.py +0 -18
- parsl/tests/configs/swan_htex.py +0 -43
- parsl/tests/configs/theta.py +0 -37
- parsl/tests/integration/test_channels/__init__.py +0 -0
- parsl/tests/integration/test_channels/test_channels.py +0 -17
- parsl/tests/integration/test_channels/test_local_channel.py +0 -42
- parsl/tests/integration/test_channels/test_scp_1.py +0 -45
- parsl/tests/integration/test_channels/test_ssh_1.py +0 -40
- parsl/tests/integration/test_channels/test_ssh_errors.py +0 -46
- parsl/tests/integration/test_channels/test_ssh_file_transport.py +0 -41
- parsl/tests/integration/test_channels/test_ssh_interactive.py +0 -24
- parsl/tests/manual_tests/test_ad_hoc_htex.py +0 -48
- parsl/tests/manual_tests/test_fan_in_out_htex_remote.py +0 -88
- parsl/tests/manual_tests/test_oauth_ssh.py +0 -13
- parsl/tests/sites/test_local_adhoc.py +0 -61
- parsl/tests/test_channels/__init__.py +0 -0
- parsl/tests/test_channels/test_large_output.py +0 -22
- parsl/tests/test_data/__init__.py +0 -0
- parsl/tests/test_mpi_apps/test_mpi_mode_disabled.py +0 -51
- parsl/tests/test_providers/test_cobalt_deprecation_warning.py +0 -16
- parsl-2024.3.11.dist-info/METADATA +0 -98
- parsl-2024.3.11.dist-info/RECORD +0 -447
- parsl/{channels/local → monitoring/radios}/__init__.py +0 -0
- parsl/{channels/oauth_ssh → tests/test_shutdown}/__init__.py +0 -0
- parsl/tests/{test_data → test_staging}/test_file_apps.py +0 -0
- parsl/tests/{test_data → test_staging}/test_file_staging.py +0 -0
- parsl/{channels/ssh → tests/unit}/__init__.py +0 -0
- {parsl-2024.3.11.data → parsl-2025.1.13.data}/scripts/parsl_coprocess.py +1 -1
- {parsl-2024.3.11.dist-info → parsl-2025.1.13.dist-info}/LICENSE +0 -0
- {parsl-2024.3.11.dist-info → parsl-2025.1.13.dist-info}/entry_points.txt +0 -0
- {parsl-2024.3.11.dist-info → parsl-2025.1.13.dist-info}/top_level.txt +0 -0
@@ -1,41 +0,0 @@
|
|
1
|
-
import parsl
|
2
|
-
from parsl.channels.ssh.ssh import SSHChannel as SSH
|
3
|
-
|
4
|
-
|
5
|
-
def connect_and_list(hostname, username):
|
6
|
-
conn = SSH(hostname, username=username)
|
7
|
-
ec, out, err = conn.execute_wait("echo $HOSTNAME")
|
8
|
-
conn.close()
|
9
|
-
return out
|
10
|
-
|
11
|
-
|
12
|
-
def test_push(conn, fname="test001.txt"):
|
13
|
-
|
14
|
-
with open(fname, 'w') as f:
|
15
|
-
f.write("Hello from parsl.ssh testing\n")
|
16
|
-
|
17
|
-
conn.push_file(fname, "/tmp")
|
18
|
-
ec, out, err = conn.execute_wait("ls /tmp/{0}".format(fname))
|
19
|
-
print(ec, out, err)
|
20
|
-
|
21
|
-
|
22
|
-
def test_pull(conn, fname="test001.txt"):
|
23
|
-
|
24
|
-
local = "foo"
|
25
|
-
conn.pull_file("/tmp/{0}".format(fname), local)
|
26
|
-
|
27
|
-
with open("{0}/{1}".format(local, fname), 'r') as f:
|
28
|
-
print(f.readlines())
|
29
|
-
|
30
|
-
|
31
|
-
if __name__ == "__main__":
|
32
|
-
|
33
|
-
parsl.set_stream_logger()
|
34
|
-
|
35
|
-
# This is for testing
|
36
|
-
conn = SSH("midway.rcc.uchicago.edu", username="yadunand")
|
37
|
-
|
38
|
-
test_push(conn)
|
39
|
-
test_pull(conn)
|
40
|
-
|
41
|
-
conn.close()
|
@@ -1,24 +0,0 @@
|
|
1
|
-
import parsl
|
2
|
-
from parsl.channels.ssh_il.ssh_il import SSHInteractiveLoginChannel as SSH
|
3
|
-
|
4
|
-
|
5
|
-
def connect_and_list(hostname, username):
|
6
|
-
conn = SSH(hostname, username=username)
|
7
|
-
ec, out, err = conn.execute_wait("echo $HOSTNAME")
|
8
|
-
conn.close()
|
9
|
-
return out
|
10
|
-
|
11
|
-
|
12
|
-
def test_cooley():
|
13
|
-
''' Test ssh channels to midway
|
14
|
-
'''
|
15
|
-
url = 'cooley.alcf.anl.gov'
|
16
|
-
uname = 'yadunand'
|
17
|
-
out = connect_and_list(url, uname)
|
18
|
-
print("Sitename :{0} hostname:{1}".format(url, out))
|
19
|
-
return
|
20
|
-
|
21
|
-
|
22
|
-
if __name__ == "__main__":
|
23
|
-
parsl.set_stream_logger()
|
24
|
-
test_cooley()
|
@@ -1,48 +0,0 @@
|
|
1
|
-
import parsl
|
2
|
-
from parsl import python_app
|
3
|
-
parsl.set_stream_logger()
|
4
|
-
|
5
|
-
from parsl.providers import AdHocProvider
|
6
|
-
from parsl.channels import SSHChannel
|
7
|
-
from parsl.config import Config
|
8
|
-
from parsl.executors import HighThroughputExecutor
|
9
|
-
|
10
|
-
remotes = ['midway2-login2.rcc.uchicago.edu', 'midway2-login1.rcc.uchicago.edu']
|
11
|
-
|
12
|
-
config = Config(
|
13
|
-
executors=[
|
14
|
-
HighThroughputExecutor(
|
15
|
-
label='AdHoc',
|
16
|
-
max_workers_per_node=2,
|
17
|
-
worker_logdir_root="/scratch/midway2/yadunand/parsl_scripts",
|
18
|
-
encrypted=True,
|
19
|
-
provider=AdHocProvider(
|
20
|
-
worker_init="source /scratch/midway2/yadunand/parsl_env_setup.sh",
|
21
|
-
channels=[SSHChannel(hostname=m,
|
22
|
-
username="yadunand",
|
23
|
-
script_dir="/scratch/midway2/yadunand/parsl_cluster")
|
24
|
-
for m in remotes]
|
25
|
-
)
|
26
|
-
)
|
27
|
-
]
|
28
|
-
)
|
29
|
-
|
30
|
-
|
31
|
-
@python_app
|
32
|
-
def platform(sleep=2, stdout=None):
|
33
|
-
import platform
|
34
|
-
import time
|
35
|
-
time.sleep(sleep)
|
36
|
-
return platform.uname()
|
37
|
-
|
38
|
-
|
39
|
-
def test_raw_provider():
|
40
|
-
|
41
|
-
parsl.load(config)
|
42
|
-
|
43
|
-
x = [platform() for i in range(10)]
|
44
|
-
print([i.result() for i in x])
|
45
|
-
|
46
|
-
|
47
|
-
if __name__ == "__main__":
|
48
|
-
test_raw_provider()
|
@@ -1,88 +0,0 @@
|
|
1
|
-
import parsl
|
2
|
-
from parsl.monitoring.monitoring import MonitoringHub
|
3
|
-
from parsl.config import Config
|
4
|
-
from parsl.executors import HighThroughputExecutor
|
5
|
-
from parsl.launchers import AprunLauncher
|
6
|
-
from parsl.providers import CobaltProvider
|
7
|
-
|
8
|
-
import logging
|
9
|
-
from parsl.app.app import python_app
|
10
|
-
|
11
|
-
|
12
|
-
def local_setup():
|
13
|
-
threads_config = Config(
|
14
|
-
executors=[
|
15
|
-
HighThroughputExecutor(
|
16
|
-
label="theta_htex",
|
17
|
-
# worker_debug=True,
|
18
|
-
cores_per_worker=4,
|
19
|
-
encrypted=True,
|
20
|
-
provider=CobaltProvider(
|
21
|
-
queue='debug-flat-quad',
|
22
|
-
account='CSC249ADCD01',
|
23
|
-
launcher=AprunLauncher(overrides="-d 64"),
|
24
|
-
worker_init='source activate parsl-issues',
|
25
|
-
init_blocks=1,
|
26
|
-
max_blocks=1,
|
27
|
-
min_blocks=1,
|
28
|
-
nodes_per_block=4,
|
29
|
-
cmd_timeout=60,
|
30
|
-
walltime='00:10:00',
|
31
|
-
),
|
32
|
-
)
|
33
|
-
],
|
34
|
-
monitoring=MonitoringHub(
|
35
|
-
hub_port=55055,
|
36
|
-
logging_level=logging.DEBUG,
|
37
|
-
resource_monitoring_interval=10),
|
38
|
-
strategy='none')
|
39
|
-
parsl.load(threads_config)
|
40
|
-
|
41
|
-
|
42
|
-
def local_teardown():
|
43
|
-
parsl.clear()
|
44
|
-
|
45
|
-
|
46
|
-
@python_app
|
47
|
-
def inc(x):
|
48
|
-
import time
|
49
|
-
start = time.time()
|
50
|
-
sleep_duration = 30.0
|
51
|
-
while True:
|
52
|
-
x += 1
|
53
|
-
end = time.time()
|
54
|
-
if end - start >= sleep_duration:
|
55
|
-
break
|
56
|
-
return x
|
57
|
-
|
58
|
-
|
59
|
-
@python_app
|
60
|
-
def add_inc(inputs=[]):
|
61
|
-
import time
|
62
|
-
start = time.time()
|
63
|
-
sleep_duration = 30.0
|
64
|
-
res = sum(inputs)
|
65
|
-
while True:
|
66
|
-
res += 1
|
67
|
-
end = time.time()
|
68
|
-
if end - start >= sleep_duration:
|
69
|
-
break
|
70
|
-
return res
|
71
|
-
|
72
|
-
|
73
|
-
if __name__ == "__main__":
|
74
|
-
|
75
|
-
total = 200
|
76
|
-
half = int(total / 2)
|
77
|
-
one_third = int(total / 3)
|
78
|
-
two_third = int(total / 3 * 2)
|
79
|
-
futures_1 = [inc(i) for i in range(total)]
|
80
|
-
futures_2 = [add_inc(inputs=futures_1[0:half]),
|
81
|
-
add_inc(inputs=futures_1[half:total])]
|
82
|
-
futures_3 = [inc(futures_2[0]) for _ in range(half)] + [inc(futures_2[1]) for _ in range(half)]
|
83
|
-
futures_4 = [add_inc(inputs=futures_3[0:one_third]),
|
84
|
-
add_inc(inputs=futures_3[one_third:two_third]),
|
85
|
-
add_inc(inputs=futures_3[two_third:total])]
|
86
|
-
|
87
|
-
print([f.result() for f in futures_4])
|
88
|
-
print("Done")
|
@@ -1,13 +0,0 @@
|
|
1
|
-
from parsl.channels import OAuthSSHChannel
|
2
|
-
|
3
|
-
|
4
|
-
def test_channel():
|
5
|
-
channel = OAuthSSHChannel(hostname='ssh.demo.globus.org', username='yadunand')
|
6
|
-
x, stdout, stderr = channel.execute_wait('ls')
|
7
|
-
print(x, stdout, stderr)
|
8
|
-
assert x == 0, "Expected exit code 0, got {}".format(x)
|
9
|
-
|
10
|
-
|
11
|
-
if __name__ == '__main__':
|
12
|
-
|
13
|
-
test_channel()
|
@@ -1,61 +0,0 @@
|
|
1
|
-
import pytest
|
2
|
-
|
3
|
-
from parsl import python_app
|
4
|
-
from parsl.tests.configs.local_adhoc import fresh_config as local_config
|
5
|
-
|
6
|
-
import logging
|
7
|
-
logger = logging.getLogger(__name__)
|
8
|
-
|
9
|
-
|
10
|
-
@python_app
|
11
|
-
def python_app_2():
|
12
|
-
import os
|
13
|
-
import threading
|
14
|
-
import time
|
15
|
-
time.sleep(1)
|
16
|
-
return "Hello from PID[{}] TID[{}]".format(os.getpid(), threading.current_thread())
|
17
|
-
|
18
|
-
|
19
|
-
@python_app
|
20
|
-
def python_app_1():
|
21
|
-
import os
|
22
|
-
import threading
|
23
|
-
import time
|
24
|
-
time.sleep(1)
|
25
|
-
return "Hello from PID[{}] TID[{}]".format(os.getpid(), threading.current_thread())
|
26
|
-
|
27
|
-
|
28
|
-
@python_app
|
29
|
-
def bash_app(stdout=None, stderr=None):
|
30
|
-
return 'echo "Hello from $(uname -a)" ; sleep 2'
|
31
|
-
|
32
|
-
|
33
|
-
@pytest.mark.local
|
34
|
-
def test_python(N=2):
|
35
|
-
"""Testing basic python functionality."""
|
36
|
-
|
37
|
-
r1 = {}
|
38
|
-
r2 = {}
|
39
|
-
for i in range(0, N):
|
40
|
-
r1[i] = python_app_1()
|
41
|
-
r2[i] = python_app_2()
|
42
|
-
print("Waiting ....")
|
43
|
-
|
44
|
-
for x in r1:
|
45
|
-
print("python_app_1 : ", r1[x].result())
|
46
|
-
for x in r2:
|
47
|
-
print("python_app_2 : ", r2[x].result())
|
48
|
-
|
49
|
-
return
|
50
|
-
|
51
|
-
|
52
|
-
@pytest.mark.local
|
53
|
-
def test_bash():
|
54
|
-
"""Testing basic bash functionality."""
|
55
|
-
|
56
|
-
import os
|
57
|
-
fname = os.path.basename(__file__)
|
58
|
-
|
59
|
-
x = bash_app(stdout="{0}.out".format(fname))
|
60
|
-
print("Waiting ....")
|
61
|
-
print(x.result())
|
File without changes
|
@@ -1,22 +0,0 @@
|
|
1
|
-
import pytest
|
2
|
-
|
3
|
-
from parsl.channels.local.local import LocalChannel
|
4
|
-
|
5
|
-
|
6
|
-
@pytest.mark.local
|
7
|
-
def test_local_large_output_2210():
|
8
|
-
"""Regression test for #2210.
|
9
|
-
The local channel was hanging if the specified command gave too
|
10
|
-
much output, due to a race condition between process exiting and
|
11
|
-
pipes filling up.
|
12
|
-
"""
|
13
|
-
|
14
|
-
c = LocalChannel()
|
15
|
-
|
16
|
-
# this will output 128kb of stdout
|
17
|
-
c.execute_wait("yes | dd count=128 bs=1024", walltime=60)
|
18
|
-
|
19
|
-
# if this test fails, execute_wait should raise a timeout
|
20
|
-
# exception.
|
21
|
-
|
22
|
-
# The contents out the output is not verified by this test
|
File without changes
|
@@ -1,51 +0,0 @@
|
|
1
|
-
import logging
|
2
|
-
from typing import Dict
|
3
|
-
import pytest
|
4
|
-
import parsl
|
5
|
-
from parsl import python_app
|
6
|
-
from parsl.tests.configs.htex_local import fresh_config
|
7
|
-
|
8
|
-
EXECUTOR_LABEL = "MPI_TEST"
|
9
|
-
|
10
|
-
|
11
|
-
def local_setup():
|
12
|
-
config = fresh_config()
|
13
|
-
config.executors[0].label = EXECUTOR_LABEL
|
14
|
-
config.executors[0].max_workers_per_node = 1
|
15
|
-
config.executors[0].enable_mpi_mode = False
|
16
|
-
parsl.load(config)
|
17
|
-
|
18
|
-
|
19
|
-
def local_teardown():
|
20
|
-
parsl.dfk().cleanup()
|
21
|
-
parsl.clear()
|
22
|
-
|
23
|
-
|
24
|
-
@python_app
|
25
|
-
def get_env_vars(parsl_resource_specification: Dict = {}) -> Dict:
|
26
|
-
import os
|
27
|
-
|
28
|
-
parsl_vars = {}
|
29
|
-
for key in os.environ:
|
30
|
-
if key.startswith("PARSL_"):
|
31
|
-
parsl_vars[key] = os.environ[key]
|
32
|
-
return parsl_vars
|
33
|
-
|
34
|
-
|
35
|
-
@pytest.mark.local
|
36
|
-
def test_only_resource_specs_set():
|
37
|
-
"""Confirm that resource_spec env vars are set while launch prefixes are not
|
38
|
-
when enable_mpi_mode = False"""
|
39
|
-
resource_spec = {
|
40
|
-
"num_nodes": 4,
|
41
|
-
"ranks_per_node": 2,
|
42
|
-
}
|
43
|
-
|
44
|
-
future = get_env_vars(parsl_resource_specification=resource_spec)
|
45
|
-
|
46
|
-
result = future.result()
|
47
|
-
assert isinstance(result, Dict)
|
48
|
-
assert "PARSL_DEFAULT_PREFIX" not in result
|
49
|
-
assert "PARSL_SRUN_PREFIX" not in result
|
50
|
-
assert result["PARSL_NUM_NODES"] == str(resource_spec["num_nodes"])
|
51
|
-
assert result["PARSL_RANKS_PER_NODE"] == str(resource_spec["ranks_per_node"])
|
@@ -1,16 +0,0 @@
|
|
1
|
-
import warnings
|
2
|
-
import pytest
|
3
|
-
from parsl.providers import CobaltProvider
|
4
|
-
|
5
|
-
|
6
|
-
@pytest.mark.local
|
7
|
-
def test_deprecation_warning():
|
8
|
-
|
9
|
-
with warnings.catch_warnings(record=True) as w:
|
10
|
-
warnings.simplefilter("always")
|
11
|
-
|
12
|
-
CobaltProvider()
|
13
|
-
|
14
|
-
assert len(w) == 1
|
15
|
-
assert issubclass(w[-1].category, DeprecationWarning)
|
16
|
-
assert "CobaltProvider" in str(w[-1].message)
|
@@ -1,98 +0,0 @@
|
|
1
|
-
Metadata-Version: 2.1
|
2
|
-
Name: parsl
|
3
|
-
Version: 2024.3.11
|
4
|
-
Summary: Simple data dependent workflows in Python
|
5
|
-
Home-page: https://github.com/Parsl/parsl
|
6
|
-
Download-URL: https://github.com/Parsl/parsl/archive/2024.03.11.tar.gz
|
7
|
-
Author: The Parsl Team
|
8
|
-
Author-email: parsl@googlegroups.com
|
9
|
-
License: Apache 2.0
|
10
|
-
Keywords: Workflows,Scientific computing
|
11
|
-
Classifier: Development Status :: 5 - Production/Stable
|
12
|
-
Classifier: Intended Audience :: Developers
|
13
|
-
Classifier: License :: OSI Approved :: Apache Software License
|
14
|
-
Classifier: Programming Language :: Python :: 3.8
|
15
|
-
Classifier: Programming Language :: Python :: 3.9
|
16
|
-
Classifier: Programming Language :: Python :: 3.10
|
17
|
-
Classifier: Programming Language :: Python :: 3.11
|
18
|
-
Classifier: Programming Language :: Python :: 3.12
|
19
|
-
Requires-Python: >=3.8.0
|
20
|
-
License-File: LICENSE
|
21
|
-
Requires-Dist: pyzmq >=17.1.2
|
22
|
-
Requires-Dist: typeguard !=3.*,<5,>=2.10
|
23
|
-
Requires-Dist: typing-extensions <5,>=4.6
|
24
|
-
Requires-Dist: globus-sdk
|
25
|
-
Requires-Dist: dill
|
26
|
-
Requires-Dist: tblib
|
27
|
-
Requires-Dist: requests
|
28
|
-
Requires-Dist: paramiko
|
29
|
-
Requires-Dist: psutil >=5.5.1
|
30
|
-
Requires-Dist: setproctitle
|
31
|
-
Provides-Extra: all
|
32
|
-
Requires-Dist: sqlalchemy <2,>=1.4 ; extra == 'all'
|
33
|
-
Requires-Dist: pydot ; extra == 'all'
|
34
|
-
Requires-Dist: networkx <2.6,>=2.5 ; extra == 'all'
|
35
|
-
Requires-Dist: Flask >=1.0.2 ; extra == 'all'
|
36
|
-
Requires-Dist: flask-sqlalchemy ; extra == 'all'
|
37
|
-
Requires-Dist: pandas <2.2 ; extra == 'all'
|
38
|
-
Requires-Dist: plotly ; extra == 'all'
|
39
|
-
Requires-Dist: python-daemon ; extra == 'all'
|
40
|
-
Requires-Dist: boto3 ; extra == 'all'
|
41
|
-
Requires-Dist: kubernetes ; extra == 'all'
|
42
|
-
Requires-Dist: oauth-ssh >=0.9 ; extra == 'all'
|
43
|
-
Requires-Dist: ipython <=8.6.0 ; extra == 'all'
|
44
|
-
Requires-Dist: nbsphinx ; extra == 'all'
|
45
|
-
Requires-Dist: sphinx <7.2,>=7.1 ; extra == 'all'
|
46
|
-
Requires-Dist: sphinx-rtd-theme ; extra == 'all'
|
47
|
-
Requires-Dist: google-auth ; extra == 'all'
|
48
|
-
Requires-Dist: google-api-python-client ; extra == 'all'
|
49
|
-
Requires-Dist: python-gssapi ; extra == 'all'
|
50
|
-
Requires-Dist: azure <=4 ; extra == 'all'
|
51
|
-
Requires-Dist: msrestazure ; extra == 'all'
|
52
|
-
Requires-Dist: work-queue ; extra == 'all'
|
53
|
-
Requires-Dist: pyyaml ; extra == 'all'
|
54
|
-
Requires-Dist: cffi ; extra == 'all'
|
55
|
-
Requires-Dist: jsonschema ; extra == 'all'
|
56
|
-
Requires-Dist: proxystore ; extra == 'all'
|
57
|
-
Requires-Dist: radical.pilot ; extra == 'all'
|
58
|
-
Provides-Extra: aws
|
59
|
-
Requires-Dist: boto3 ; extra == 'aws'
|
60
|
-
Provides-Extra: azure
|
61
|
-
Requires-Dist: azure <=4 ; extra == 'azure'
|
62
|
-
Requires-Dist: msrestazure ; extra == 'azure'
|
63
|
-
Provides-Extra: docs
|
64
|
-
Requires-Dist: ipython <=8.6.0 ; extra == 'docs'
|
65
|
-
Requires-Dist: nbsphinx ; extra == 'docs'
|
66
|
-
Requires-Dist: sphinx <7.2,>=7.1 ; extra == 'docs'
|
67
|
-
Requires-Dist: sphinx-rtd-theme ; extra == 'docs'
|
68
|
-
Provides-Extra: flux
|
69
|
-
Requires-Dist: pyyaml ; extra == 'flux'
|
70
|
-
Requires-Dist: cffi ; extra == 'flux'
|
71
|
-
Requires-Dist: jsonschema ; extra == 'flux'
|
72
|
-
Provides-Extra: google_cloud
|
73
|
-
Requires-Dist: google-auth ; extra == 'google_cloud'
|
74
|
-
Requires-Dist: google-api-python-client ; extra == 'google_cloud'
|
75
|
-
Provides-Extra: gssapi
|
76
|
-
Requires-Dist: python-gssapi ; extra == 'gssapi'
|
77
|
-
Provides-Extra: kubernetes
|
78
|
-
Requires-Dist: kubernetes ; extra == 'kubernetes'
|
79
|
-
Provides-Extra: monitoring
|
80
|
-
Requires-Dist: sqlalchemy <2,>=1.4 ; extra == 'monitoring'
|
81
|
-
Provides-Extra: oauth_ssh
|
82
|
-
Requires-Dist: oauth-ssh >=0.9 ; extra == 'oauth_ssh'
|
83
|
-
Provides-Extra: proxystore
|
84
|
-
Requires-Dist: proxystore ; extra == 'proxystore'
|
85
|
-
Provides-Extra: radical-pilot
|
86
|
-
Requires-Dist: radical.pilot ; extra == 'radical-pilot'
|
87
|
-
Provides-Extra: visualization
|
88
|
-
Requires-Dist: pydot ; extra == 'visualization'
|
89
|
-
Requires-Dist: networkx <2.6,>=2.5 ; extra == 'visualization'
|
90
|
-
Requires-Dist: Flask >=1.0.2 ; extra == 'visualization'
|
91
|
-
Requires-Dist: flask-sqlalchemy ; extra == 'visualization'
|
92
|
-
Requires-Dist: pandas <2.2 ; extra == 'visualization'
|
93
|
-
Requires-Dist: plotly ; extra == 'visualization'
|
94
|
-
Requires-Dist: python-daemon ; extra == 'visualization'
|
95
|
-
Provides-Extra: workqueue
|
96
|
-
Requires-Dist: work-queue ; extra == 'workqueue'
|
97
|
-
|
98
|
-
Simple parallel workflows system for Python
|