parsl 2024.3.18__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.
Files changed (369) hide show
  1. parsl/__init__.py +9 -10
  2. parsl/addresses.py +26 -6
  3. parsl/app/app.py +7 -8
  4. parsl/app/bash.py +15 -8
  5. parsl/app/errors.py +10 -13
  6. parsl/app/futures.py +8 -10
  7. parsl/app/python.py +2 -1
  8. parsl/benchmark/perf.py +2 -1
  9. parsl/concurrent/__init__.py +2 -2
  10. parsl/config.py +53 -10
  11. parsl/configs/ASPIRE1.py +6 -5
  12. parsl/configs/Azure.py +9 -8
  13. parsl/configs/bridges.py +6 -4
  14. parsl/configs/cc_in2p3.py +3 -3
  15. parsl/configs/ec2.py +3 -1
  16. parsl/configs/expanse.py +4 -3
  17. parsl/configs/frontera.py +3 -4
  18. parsl/configs/htex_local.py +3 -4
  19. parsl/configs/illinoiscluster.py +3 -1
  20. parsl/configs/improv.py +34 -0
  21. parsl/configs/kubernetes.py +4 -3
  22. parsl/configs/local_threads.py +5 -1
  23. parsl/configs/midway.py +5 -3
  24. parsl/configs/osg.py +4 -2
  25. parsl/configs/polaris.py +4 -2
  26. parsl/configs/stampede2.py +6 -5
  27. parsl/configs/summit.py +3 -3
  28. parsl/configs/toss3_llnl.py +4 -3
  29. parsl/configs/vineex_local.py +6 -4
  30. parsl/configs/wqex_local.py +5 -3
  31. parsl/curvezmq.py +4 -0
  32. parsl/data_provider/data_manager.py +4 -3
  33. parsl/data_provider/file_noop.py +1 -2
  34. parsl/data_provider/files.py +3 -3
  35. parsl/data_provider/ftp.py +1 -3
  36. parsl/data_provider/globus.py +7 -6
  37. parsl/data_provider/http.py +2 -2
  38. parsl/data_provider/rsync.py +1 -1
  39. parsl/data_provider/staging.py +2 -2
  40. parsl/data_provider/zip.py +135 -0
  41. parsl/dataflow/dependency_resolvers.py +115 -0
  42. parsl/dataflow/dflow.py +259 -223
  43. parsl/dataflow/errors.py +3 -5
  44. parsl/dataflow/futures.py +27 -14
  45. parsl/dataflow/memoization.py +5 -5
  46. parsl/dataflow/rundirs.py +5 -6
  47. parsl/dataflow/taskrecord.py +4 -5
  48. parsl/executors/__init__.py +4 -2
  49. parsl/executors/base.py +45 -15
  50. parsl/executors/errors.py +13 -0
  51. parsl/executors/execute_task.py +37 -0
  52. parsl/executors/flux/execute_parsl_task.py +3 -3
  53. parsl/executors/flux/executor.py +18 -19
  54. parsl/executors/flux/flux_instance_manager.py +26 -27
  55. parsl/executors/high_throughput/errors.py +43 -3
  56. parsl/executors/high_throughput/executor.py +307 -285
  57. parsl/executors/high_throughput/interchange.py +137 -168
  58. parsl/executors/high_throughput/manager_record.py +4 -0
  59. parsl/executors/high_throughput/manager_selector.py +55 -0
  60. parsl/executors/high_throughput/monitoring_info.py +2 -1
  61. parsl/executors/high_throughput/mpi_executor.py +113 -0
  62. parsl/executors/high_throughput/mpi_prefix_composer.py +10 -11
  63. parsl/executors/high_throughput/mpi_resource_management.py +6 -17
  64. parsl/executors/high_throughput/probe.py +9 -7
  65. parsl/executors/high_throughput/process_worker_pool.py +77 -75
  66. parsl/executors/high_throughput/zmq_pipes.py +81 -23
  67. parsl/executors/radical/executor.py +130 -79
  68. parsl/executors/radical/rpex_resources.py +17 -15
  69. parsl/executors/radical/rpex_worker.py +4 -3
  70. parsl/executors/status_handling.py +157 -51
  71. parsl/executors/taskvine/__init__.py +1 -1
  72. parsl/executors/taskvine/errors.py +1 -1
  73. parsl/executors/taskvine/exec_parsl_function.py +2 -2
  74. parsl/executors/taskvine/executor.py +38 -55
  75. parsl/executors/taskvine/factory.py +1 -1
  76. parsl/executors/taskvine/factory_config.py +1 -1
  77. parsl/executors/taskvine/manager.py +17 -13
  78. parsl/executors/taskvine/manager_config.py +7 -2
  79. parsl/executors/threads.py +6 -6
  80. parsl/executors/workqueue/errors.py +1 -1
  81. parsl/executors/workqueue/exec_parsl_function.py +6 -5
  82. parsl/executors/workqueue/executor.py +64 -63
  83. parsl/executors/workqueue/parsl_coprocess.py +1 -1
  84. parsl/jobs/error_handlers.py +2 -2
  85. parsl/jobs/job_status_poller.py +28 -112
  86. parsl/jobs/states.py +7 -2
  87. parsl/jobs/strategy.py +43 -31
  88. parsl/launchers/__init__.py +12 -3
  89. parsl/launchers/errors.py +1 -1
  90. parsl/launchers/launchers.py +0 -6
  91. parsl/log_utils.py +1 -2
  92. parsl/monitoring/db_manager.py +55 -93
  93. parsl/monitoring/errors.py +6 -0
  94. parsl/monitoring/monitoring.py +85 -311
  95. parsl/monitoring/queries/pandas.py +1 -2
  96. parsl/monitoring/radios/base.py +13 -0
  97. parsl/monitoring/radios/filesystem.py +52 -0
  98. parsl/monitoring/radios/htex.py +57 -0
  99. parsl/monitoring/radios/multiprocessing.py +17 -0
  100. parsl/monitoring/radios/udp.py +56 -0
  101. parsl/monitoring/radios/zmq.py +17 -0
  102. parsl/monitoring/remote.py +33 -37
  103. parsl/monitoring/router.py +212 -0
  104. parsl/monitoring/types.py +5 -6
  105. parsl/monitoring/visualization/app.py +4 -2
  106. parsl/monitoring/visualization/models.py +0 -1
  107. parsl/monitoring/visualization/plots/default/workflow_plots.py +8 -4
  108. parsl/monitoring/visualization/plots/default/workflow_resource_plots.py +1 -0
  109. parsl/monitoring/visualization/utils.py +0 -1
  110. parsl/monitoring/visualization/views.py +16 -9
  111. parsl/multiprocessing.py +0 -1
  112. parsl/process_loggers.py +1 -2
  113. parsl/providers/__init__.py +8 -17
  114. parsl/providers/aws/aws.py +2 -3
  115. parsl/providers/azure/azure.py +4 -5
  116. parsl/providers/base.py +2 -18
  117. parsl/providers/cluster_provider.py +3 -9
  118. parsl/providers/condor/condor.py +7 -17
  119. parsl/providers/errors.py +2 -2
  120. parsl/providers/googlecloud/googlecloud.py +2 -1
  121. parsl/providers/grid_engine/grid_engine.py +5 -14
  122. parsl/providers/kubernetes/kube.py +80 -40
  123. parsl/providers/local/local.py +13 -26
  124. parsl/providers/lsf/lsf.py +5 -23
  125. parsl/providers/pbspro/pbspro.py +5 -17
  126. parsl/providers/slurm/slurm.py +81 -39
  127. parsl/providers/torque/torque.py +3 -14
  128. parsl/serialize/__init__.py +8 -3
  129. parsl/serialize/base.py +1 -2
  130. parsl/serialize/concretes.py +5 -4
  131. parsl/serialize/facade.py +3 -3
  132. parsl/serialize/proxystore.py +3 -2
  133. parsl/tests/__init__.py +1 -1
  134. parsl/tests/configs/azure_single_node.py +4 -5
  135. parsl/tests/configs/bridges.py +3 -2
  136. parsl/tests/configs/cc_in2p3.py +1 -3
  137. parsl/tests/configs/comet.py +2 -1
  138. parsl/tests/configs/ec2_single_node.py +1 -2
  139. parsl/tests/configs/ec2_spot.py +1 -2
  140. parsl/tests/configs/flux_local.py +11 -0
  141. parsl/tests/configs/frontera.py +2 -3
  142. parsl/tests/configs/htex_local.py +3 -5
  143. parsl/tests/configs/htex_local_alternate.py +11 -15
  144. parsl/tests/configs/htex_local_intask_staging.py +5 -9
  145. parsl/tests/configs/htex_local_rsync_staging.py +4 -8
  146. parsl/tests/configs/local_radical.py +1 -3
  147. parsl/tests/configs/local_radical_mpi.py +2 -2
  148. parsl/tests/configs/local_threads_checkpoint_periodic.py +8 -10
  149. parsl/tests/configs/local_threads_monitoring.py +0 -1
  150. parsl/tests/configs/midway.py +2 -2
  151. parsl/tests/configs/nscc_singapore.py +3 -3
  152. parsl/tests/configs/osg_htex.py +1 -1
  153. parsl/tests/configs/petrelkube.py +3 -2
  154. parsl/tests/configs/slurm_local.py +24 -0
  155. parsl/tests/configs/summit.py +1 -0
  156. parsl/tests/configs/taskvine_ex.py +4 -7
  157. parsl/tests/configs/user_opts.py +0 -7
  158. parsl/tests/configs/workqueue_ex.py +4 -6
  159. parsl/tests/conftest.py +27 -13
  160. parsl/tests/integration/test_stress/test_python_simple.py +3 -4
  161. parsl/tests/integration/test_stress/test_python_threads.py +3 -5
  162. parsl/tests/manual_tests/htex_local.py +4 -6
  163. parsl/tests/manual_tests/test_basic.py +1 -0
  164. parsl/tests/manual_tests/test_log_filter.py +3 -1
  165. parsl/tests/manual_tests/test_memory_limits.py +6 -8
  166. parsl/tests/manual_tests/test_regression_220.py +2 -1
  167. parsl/tests/manual_tests/test_udp_simple.py +4 -4
  168. parsl/tests/manual_tests/test_worker_count.py +3 -2
  169. parsl/tests/scaling_tests/htex_local.py +2 -4
  170. parsl/tests/scaling_tests/test_scale.py +0 -9
  171. parsl/tests/scaling_tests/vineex_condor.py +1 -2
  172. parsl/tests/scaling_tests/vineex_local.py +1 -2
  173. parsl/tests/site_tests/site_config_selector.py +1 -6
  174. parsl/tests/site_tests/test_provider.py +4 -2
  175. parsl/tests/site_tests/test_site.py +2 -0
  176. parsl/tests/sites/test_affinity.py +7 -7
  177. parsl/tests/sites/test_dynamic_executor.py +3 -4
  178. parsl/tests/sites/test_ec2.py +3 -2
  179. parsl/tests/sites/test_worker_info.py +4 -5
  180. parsl/tests/test_aalst_patterns.py +0 -1
  181. parsl/tests/test_bash_apps/test_apptimeout.py +2 -2
  182. parsl/tests/test_bash_apps/test_basic.py +10 -4
  183. parsl/tests/test_bash_apps/test_error_codes.py +5 -7
  184. parsl/tests/test_bash_apps/test_inputs_default.py +25 -0
  185. parsl/tests/test_bash_apps/test_kwarg_storage.py +1 -1
  186. parsl/tests/test_bash_apps/test_memoize.py +2 -8
  187. parsl/tests/test_bash_apps/test_memoize_ignore_args.py +9 -14
  188. parsl/tests/test_bash_apps/test_memoize_ignore_args_regr.py +9 -14
  189. parsl/tests/test_bash_apps/test_multiline.py +1 -1
  190. parsl/tests/test_bash_apps/test_pipeline.py +1 -1
  191. parsl/tests/test_bash_apps/test_std_uri.py +123 -0
  192. parsl/tests/test_bash_apps/test_stdout.py +33 -8
  193. parsl/tests/test_callables.py +2 -2
  194. parsl/tests/test_checkpointing/test_periodic.py +21 -39
  195. parsl/tests/test_checkpointing/test_python_checkpoint_1.py +1 -0
  196. parsl/tests/test_checkpointing/test_python_checkpoint_2.py +2 -2
  197. parsl/tests/test_checkpointing/test_python_checkpoint_3.py +0 -1
  198. parsl/tests/test_checkpointing/test_regression_239.py +1 -1
  199. parsl/tests/test_checkpointing/test_task_exit.py +2 -3
  200. parsl/tests/test_docs/test_from_slides.py +5 -2
  201. parsl/tests/test_docs/test_kwargs.py +4 -1
  202. parsl/tests/test_docs/test_tutorial_1.py +1 -2
  203. parsl/tests/test_docs/test_workflow1.py +2 -2
  204. parsl/tests/test_docs/test_workflow2.py +0 -1
  205. parsl/tests/test_error_handling/test_rand_fail.py +2 -2
  206. parsl/tests/test_error_handling/test_resource_spec.py +10 -12
  207. parsl/tests/test_error_handling/test_retries.py +6 -16
  208. parsl/tests/test_error_handling/test_retry_handler.py +1 -0
  209. parsl/tests/test_error_handling/test_retry_handler_failure.py +2 -1
  210. parsl/tests/test_error_handling/test_serialization_fail.py +1 -1
  211. parsl/tests/test_error_handling/test_wrap_with_logs.py +1 -0
  212. parsl/tests/test_execute_task.py +29 -0
  213. parsl/tests/test_flux.py +1 -1
  214. parsl/tests/test_htex/test_basic.py +2 -3
  215. parsl/tests/test_htex/test_block_manager_selector_unit.py +20 -0
  216. parsl/tests/test_htex/test_command_client_timeout.py +66 -0
  217. parsl/tests/test_htex/test_connected_blocks.py +3 -2
  218. parsl/tests/test_htex/test_cpu_affinity_explicit.py +6 -10
  219. parsl/tests/test_htex/test_disconnected_blocks.py +6 -5
  220. parsl/tests/test_htex/test_disconnected_blocks_failing_provider.py +71 -0
  221. parsl/tests/test_htex/test_drain.py +11 -10
  222. parsl/tests/test_htex/test_htex.py +51 -25
  223. parsl/tests/test_htex/test_manager_failure.py +0 -1
  224. parsl/tests/test_htex/test_manager_selector_by_block.py +51 -0
  225. parsl/tests/test_htex/test_managers_command.py +36 -0
  226. parsl/tests/test_htex/test_missing_worker.py +2 -12
  227. parsl/tests/test_htex/test_multiple_disconnected_blocks.py +9 -9
  228. parsl/tests/test_htex/test_resource_spec_validation.py +45 -0
  229. parsl/tests/test_htex/test_zmq_binding.py +29 -8
  230. parsl/tests/test_monitoring/test_app_names.py +5 -5
  231. parsl/tests/test_monitoring/test_basic.py +73 -25
  232. parsl/tests/test_monitoring/test_db_locks.py +6 -4
  233. parsl/tests/test_monitoring/test_fuzz_zmq.py +19 -8
  234. parsl/tests/test_monitoring/test_htex_init_blocks_vs_monitoring.py +80 -0
  235. parsl/tests/test_monitoring/test_incomplete_futures.py +5 -4
  236. parsl/tests/test_monitoring/test_memoization_representation.py +4 -2
  237. parsl/tests/test_monitoring/test_stdouterr.py +134 -0
  238. parsl/tests/test_monitoring/test_viz_colouring.py +1 -0
  239. parsl/tests/test_mpi_apps/test_bad_mpi_config.py +33 -26
  240. parsl/tests/test_mpi_apps/test_mpi_mode_enabled.py +28 -11
  241. parsl/tests/test_mpi_apps/test_mpi_prefix.py +4 -4
  242. parsl/tests/test_mpi_apps/test_mpi_scheduler.py +7 -2
  243. parsl/tests/test_mpi_apps/test_mpiex.py +64 -0
  244. parsl/tests/test_mpi_apps/test_resource_spec.py +42 -49
  245. parsl/tests/test_providers/test_kubernetes_provider.py +102 -0
  246. parsl/tests/test_providers/test_local_provider.py +3 -132
  247. parsl/tests/test_providers/test_pbspro_template.py +2 -3
  248. parsl/tests/test_providers/test_slurm_template.py +2 -3
  249. parsl/tests/test_providers/test_submiterror_deprecation.py +2 -1
  250. parsl/tests/test_python_apps/test_context_manager.py +128 -0
  251. parsl/tests/test_python_apps/test_dep_standard_futures.py +2 -1
  252. parsl/tests/test_python_apps/test_dependencies_deep.py +59 -0
  253. parsl/tests/test_python_apps/test_fail.py +0 -25
  254. parsl/tests/test_python_apps/test_futures.py +2 -1
  255. parsl/tests/test_python_apps/test_inputs_default.py +22 -0
  256. parsl/tests/test_python_apps/test_join.py +0 -1
  257. parsl/tests/test_python_apps/test_lifted.py +11 -7
  258. parsl/tests/test_python_apps/test_memoize_bad_id_for_memo.py +1 -0
  259. parsl/tests/test_python_apps/test_outputs.py +1 -1
  260. parsl/tests/test_python_apps/test_pluggable_future_resolution.py +161 -0
  261. parsl/tests/test_radical/test_mpi_funcs.py +1 -2
  262. parsl/tests/test_regression/test_1480.py +2 -1
  263. parsl/tests/test_regression/test_1653.py +2 -1
  264. parsl/tests/test_regression/test_226.py +1 -0
  265. parsl/tests/test_regression/test_2652.py +1 -0
  266. parsl/tests/test_regression/test_69a.py +0 -1
  267. parsl/tests/test_regression/test_854.py +4 -2
  268. parsl/tests/test_regression/test_97_parallelism_0.py +1 -2
  269. parsl/tests/test_regression/test_98.py +0 -1
  270. parsl/tests/test_scaling/test_block_error_handler.py +9 -4
  271. parsl/tests/test_scaling/test_regression_1621.py +11 -15
  272. parsl/tests/test_scaling/test_regression_3568_scaledown_vs_MISSING.py +84 -0
  273. parsl/tests/test_scaling/test_regression_3696_oscillation.py +103 -0
  274. parsl/tests/test_scaling/test_scale_down.py +2 -5
  275. parsl/tests/test_scaling/test_scale_down_htex_auto_scale.py +5 -8
  276. parsl/tests/test_scaling/test_scale_down_htex_unregistered.py +71 -0
  277. parsl/tests/test_scaling/test_shutdown_scalein.py +73 -0
  278. parsl/tests/test_scaling/test_worker_interchange_bad_messages_3262.py +90 -0
  279. parsl/tests/test_serialization/test_2555_caching_deserializer.py +1 -1
  280. parsl/tests/test_serialization/test_3495_deserialize_managerlost.py +47 -0
  281. parsl/tests/test_serialization/test_basic.py +2 -1
  282. parsl/tests/test_serialization/test_htex_code_cache.py +3 -4
  283. parsl/tests/test_serialization/test_pack_resource_spec.py +2 -1
  284. parsl/tests/test_serialization/test_proxystore_configured.py +10 -6
  285. parsl/tests/test_serialization/test_proxystore_impl.py +5 -3
  286. parsl/tests/test_shutdown/test_kill_monitoring.py +64 -0
  287. parsl/tests/test_staging/staging_provider.py +2 -2
  288. parsl/tests/test_staging/test_1316.py +3 -4
  289. parsl/tests/test_staging/test_docs_1.py +2 -1
  290. parsl/tests/test_staging/test_docs_2.py +2 -1
  291. parsl/tests/test_staging/test_elaborate_noop_file.py +2 -3
  292. parsl/tests/{test_data → test_staging}/test_file.py +6 -6
  293. parsl/tests/{test_data → test_staging}/test_output_chain_filenames.py +3 -0
  294. parsl/tests/test_staging/test_staging_ftp.py +1 -0
  295. parsl/tests/test_staging/test_staging_https.py +5 -2
  296. parsl/tests/test_staging/test_staging_stdout.py +64 -0
  297. parsl/tests/test_staging/test_zip_in.py +39 -0
  298. parsl/tests/test_staging/test_zip_out.py +110 -0
  299. parsl/tests/test_staging/test_zip_to_zip.py +41 -0
  300. parsl/tests/test_summary.py +2 -2
  301. parsl/tests/test_thread_parallelism.py +0 -1
  302. parsl/tests/test_threads/test_configs.py +1 -2
  303. parsl/tests/test_threads/test_lazy_errors.py +2 -2
  304. parsl/tests/test_utils/test_execute_wait.py +35 -0
  305. parsl/tests/test_utils/test_sanitize_dns.py +76 -0
  306. parsl/tests/unit/test_address.py +20 -0
  307. parsl/tests/unit/test_file.py +99 -0
  308. parsl/tests/unit/test_usage_tracking.py +66 -0
  309. parsl/usage_tracking/api.py +65 -0
  310. parsl/usage_tracking/levels.py +6 -0
  311. parsl/usage_tracking/usage.py +104 -62
  312. parsl/utils.py +137 -4
  313. parsl/version.py +1 -1
  314. {parsl-2024.3.18.data → parsl-2025.1.13.data}/scripts/exec_parsl_function.py +6 -5
  315. parsl-2025.1.13.data/scripts/interchange.py +649 -0
  316. {parsl-2024.3.18.data → parsl-2025.1.13.data}/scripts/process_worker_pool.py +77 -75
  317. parsl-2025.1.13.dist-info/METADATA +96 -0
  318. parsl-2025.1.13.dist-info/RECORD +462 -0
  319. {parsl-2024.3.18.dist-info → parsl-2025.1.13.dist-info}/WHEEL +1 -1
  320. parsl/channels/__init__.py +0 -7
  321. parsl/channels/base.py +0 -141
  322. parsl/channels/errors.py +0 -113
  323. parsl/channels/local/local.py +0 -164
  324. parsl/channels/oauth_ssh/oauth_ssh.py +0 -110
  325. parsl/channels/ssh/ssh.py +0 -276
  326. parsl/channels/ssh_il/__init__.py +0 -0
  327. parsl/channels/ssh_il/ssh_il.py +0 -74
  328. parsl/configs/ad_hoc.py +0 -35
  329. parsl/executors/radical/rpex_master.py +0 -42
  330. parsl/monitoring/radios.py +0 -175
  331. parsl/providers/ad_hoc/__init__.py +0 -0
  332. parsl/providers/ad_hoc/ad_hoc.py +0 -248
  333. parsl/providers/cobalt/__init__.py +0 -0
  334. parsl/providers/cobalt/cobalt.py +0 -236
  335. parsl/providers/cobalt/template.py +0 -17
  336. parsl/tests/configs/ad_hoc_cluster_htex.py +0 -35
  337. parsl/tests/configs/cooley_htex.py +0 -37
  338. parsl/tests/configs/htex_ad_hoc_cluster.py +0 -28
  339. parsl/tests/configs/local_adhoc.py +0 -18
  340. parsl/tests/configs/swan_htex.py +0 -43
  341. parsl/tests/configs/theta.py +0 -37
  342. parsl/tests/integration/test_channels/__init__.py +0 -0
  343. parsl/tests/integration/test_channels/test_channels.py +0 -17
  344. parsl/tests/integration/test_channels/test_local_channel.py +0 -42
  345. parsl/tests/integration/test_channels/test_scp_1.py +0 -45
  346. parsl/tests/integration/test_channels/test_ssh_1.py +0 -40
  347. parsl/tests/integration/test_channels/test_ssh_errors.py +0 -46
  348. parsl/tests/integration/test_channels/test_ssh_file_transport.py +0 -41
  349. parsl/tests/integration/test_channels/test_ssh_interactive.py +0 -24
  350. parsl/tests/manual_tests/test_ad_hoc_htex.py +0 -48
  351. parsl/tests/manual_tests/test_fan_in_out_htex_remote.py +0 -88
  352. parsl/tests/manual_tests/test_oauth_ssh.py +0 -13
  353. parsl/tests/sites/test_local_adhoc.py +0 -61
  354. parsl/tests/test_channels/__init__.py +0 -0
  355. parsl/tests/test_channels/test_large_output.py +0 -22
  356. parsl/tests/test_data/__init__.py +0 -0
  357. parsl/tests/test_mpi_apps/test_mpi_mode_disabled.py +0 -51
  358. parsl/tests/test_providers/test_cobalt_deprecation_warning.py +0 -16
  359. parsl-2024.3.18.dist-info/METADATA +0 -98
  360. parsl-2024.3.18.dist-info/RECORD +0 -449
  361. parsl/{channels/local → monitoring/radios}/__init__.py +0 -0
  362. parsl/{channels/oauth_ssh → tests/test_shutdown}/__init__.py +0 -0
  363. parsl/tests/{test_data → test_staging}/test_file_apps.py +0 -0
  364. parsl/tests/{test_data → test_staging}/test_file_staging.py +0 -0
  365. parsl/{channels/ssh → tests/unit}/__init__.py +0 -0
  366. {parsl-2024.3.18.data → parsl-2025.1.13.data}/scripts/parsl_coprocess.py +1 -1
  367. {parsl-2024.3.18.dist-info → parsl-2025.1.13.dist-info}/LICENSE +0 -0
  368. {parsl-2024.3.18.dist-info → parsl-2025.1.13.dist-info}/entry_points.txt +0 -0
  369. {parsl-2024.3.18.dist-info → parsl-2025.1.13.dist-info}/top_level.txt +0 -0
@@ -1,10 +1,10 @@
1
1
  from parsl.config import Config
2
- from parsl.channels import LocalChannel
3
- from parsl.providers import SlurmProvider
4
2
  from parsl.executors import HighThroughputExecutor
5
3
  from parsl.launchers import SrunLauncher
4
+ from parsl.providers import SlurmProvider
6
5
 
7
6
  from .user_opts import user_opts
7
+
8
8
  """ This config assumes that it is used to launch parsl tasks from the login nodes
9
9
  of Frontera at TACC. Each job submitted to the scheduler will request 2 nodes for 10 minutes.
10
10
  """
@@ -19,7 +19,6 @@ def fresh_config():
19
19
  encrypted=True,
20
20
  provider=SlurmProvider(
21
21
  cmd_timeout=60, # Add extra time for slow scheduler responses
22
- channel=LocalChannel(),
23
22
  nodes_per_block=2,
24
23
  init_blocks=1,
25
24
  min_blocks=1,
@@ -1,9 +1,7 @@
1
- from parsl.providers import LocalProvider
2
- from parsl.channels import LocalChannel
3
- from parsl.launchers import SimpleLauncher
4
-
5
1
  from parsl.config import Config
6
2
  from parsl.executors import HighThroughputExecutor
3
+ from parsl.launchers import SimpleLauncher
4
+ from parsl.providers import LocalProvider
7
5
 
8
6
 
9
7
  def fresh_config():
@@ -11,11 +9,11 @@ def fresh_config():
11
9
  executors=[
12
10
  HighThroughputExecutor(
13
11
  label="htex_local",
12
+ loopback_address="::1",
14
13
  worker_debug=True,
15
14
  cores_per_worker=1,
16
15
  encrypted=True,
17
16
  provider=LocalProvider(
18
- channel=LocalChannel(),
19
17
  init_blocks=1,
20
18
  max_blocks=1,
21
19
  launcher=SimpleLauncher(),
@@ -15,22 +15,19 @@ will cause substantially different behaviour on whatever
15
15
  those timing parameters control.
16
16
  """
17
17
 
18
- # imports for monitoring:
19
- from parsl.monitoring import MonitoringHub
20
-
21
18
  import os
22
19
 
23
- from parsl.providers import LocalProvider
24
- from parsl.channels import LocalChannel
25
- from parsl.launchers import SingleNodeLauncher
26
-
27
20
  from parsl.config import Config
21
+ from parsl.data_provider.file_noop import NoOpFileStaging
22
+ from parsl.data_provider.ftp import FTPInTaskStaging
23
+ from parsl.data_provider.http import HTTPInTaskStaging
24
+ from parsl.data_provider.zip import ZipFileStaging
28
25
  from parsl.executors import HighThroughputExecutor
26
+ from parsl.launchers import SingleNodeLauncher
29
27
 
30
-
31
- from parsl.data_provider.http import HTTPInTaskStaging
32
- from parsl.data_provider.ftp import FTPInTaskStaging
33
- from parsl.data_provider.file_noop import NoOpFileStaging
28
+ # imports for monitoring:
29
+ from parsl.monitoring import MonitoringHub
30
+ from parsl.providers import LocalProvider
34
31
 
35
32
  working_dir = os.getcwd() + "/" + "test_htex_alternate"
36
33
 
@@ -42,7 +39,7 @@ def fresh_config():
42
39
  address="127.0.0.1",
43
40
  label="htex_Local",
44
41
  working_dir=working_dir,
45
- storage_access=[FTPInTaskStaging(), HTTPInTaskStaging(), NoOpFileStaging()],
42
+ storage_access=[ZipFileStaging(), FTPInTaskStaging(), HTTPInTaskStaging(), NoOpFileStaging()],
46
43
  worker_debug=True,
47
44
  cores_per_worker=1,
48
45
  heartbeat_period=2,
@@ -50,7 +47,6 @@ def fresh_config():
50
47
  poll_period=100,
51
48
  encrypted=True,
52
49
  provider=LocalProvider(
53
- channel=LocalChannel(),
54
50
  init_blocks=0,
55
51
  min_blocks=0,
56
52
  max_blocks=5,
@@ -64,11 +60,11 @@ def fresh_config():
64
60
  retries=2,
65
61
  monitoring=MonitoringHub(
66
62
  hub_address="localhost",
67
- hub_port=55055,
68
63
  monitoring_debug=False,
69
64
  resource_monitoring_interval=1,
70
65
  ),
71
- usage_tracking=True
66
+ usage_tracking=3,
67
+ project_name="parsl htex_local_alternate test configuration"
72
68
  )
73
69
 
74
70
 
@@ -1,13 +1,10 @@
1
- from parsl.providers import LocalProvider
2
- from parsl.channels import LocalChannel
3
- from parsl.launchers import SimpleLauncher
4
-
5
- from parsl.data_provider.http import HTTPInTaskStaging
6
- from parsl.data_provider.ftp import FTPInTaskStaging
7
- from parsl.data_provider.file_noop import NoOpFileStaging
8
-
9
1
  from parsl.config import Config
2
+ from parsl.data_provider.file_noop import NoOpFileStaging
3
+ from parsl.data_provider.ftp import FTPInTaskStaging
4
+ from parsl.data_provider.http import HTTPInTaskStaging
10
5
  from parsl.executors import HighThroughputExecutor
6
+ from parsl.launchers import SimpleLauncher
7
+ from parsl.providers import LocalProvider
11
8
 
12
9
  config = Config(
13
10
  executors=[
@@ -17,7 +14,6 @@ config = Config(
17
14
  cores_per_worker=1,
18
15
  encrypted=True,
19
16
  provider=LocalProvider(
20
- channel=LocalChannel(),
21
17
  init_blocks=1,
22
18
  max_blocks=1,
23
19
  launcher=SimpleLauncher(),
@@ -1,13 +1,10 @@
1
- from parsl.providers import LocalProvider
2
- from parsl.channels import LocalChannel
3
- from parsl.launchers import SimpleLauncher
4
-
5
- from parsl.data_provider.http import HTTPInTaskStaging
1
+ from parsl.config import Config
6
2
  from parsl.data_provider.ftp import FTPInTaskStaging
3
+ from parsl.data_provider.http import HTTPInTaskStaging
7
4
  from parsl.data_provider.rsync import RSyncStaging
8
-
9
- from parsl.config import Config
10
5
  from parsl.executors import HighThroughputExecutor
6
+ from parsl.launchers import SimpleLauncher
7
+ from parsl.providers import LocalProvider
11
8
 
12
9
  config = Config(
13
10
  executors=[
@@ -18,7 +15,6 @@ config = Config(
18
15
  working_dir="./rsync-workdir/",
19
16
  encrypted=True,
20
17
  provider=LocalProvider(
21
- channel=LocalChannel(),
22
18
  init_blocks=1,
23
19
  max_blocks=1,
24
20
  launcher=SimpleLauncher(),
@@ -1,9 +1,7 @@
1
1
  import os
2
2
 
3
3
  from parsl.config import Config
4
- from parsl.executors.radical import RadicalPilotExecutor
5
- from parsl.executors.radical import ResourceConfig
6
-
4
+ from parsl.executors.radical import RadicalPilotExecutor, ResourceConfig
7
5
 
8
6
  rpex_cfg = ResourceConfig()
9
7
 
@@ -1,10 +1,10 @@
1
1
  import os
2
+
2
3
  from parsl.config import Config
3
4
 
4
5
 
5
6
  def fresh_config():
6
- from parsl.executors.radical import ResourceConfig
7
- from parsl.executors.radical import RadicalPilotExecutor
7
+ from parsl.executors.radical import RadicalPilotExecutor, ResourceConfig
8
8
 
9
9
  rpex_cfg = ResourceConfig()
10
10
  rpex_cfg.worker_type = "MPI"
@@ -1,13 +1,11 @@
1
1
  from parsl.config import Config
2
2
  from parsl.executors.threads import ThreadPoolExecutor
3
3
 
4
- config = Config(
5
- executors=[
6
- ThreadPoolExecutor(
7
- label='local_threads_checkpoint_periodic',
8
- max_threads=1
9
- )
10
- ],
11
- checkpoint_mode='periodic',
12
- checkpoint_period='00:00:05'
13
- )
4
+
5
+ def fresh_config():
6
+ tpe = ThreadPoolExecutor(label='local_threads_checkpoint_periodic', max_threads=1)
7
+ return Config(
8
+ executors=[tpe],
9
+ checkpoint_mode='periodic',
10
+ checkpoint_period='00:00:02'
11
+ )
@@ -5,7 +5,6 @@ from parsl.monitoring import MonitoringHub
5
5
  config = Config(executors=[ThreadPoolExecutor(label='threads', max_threads=4)],
6
6
  monitoring=MonitoringHub(
7
7
  hub_address="localhost",
8
- hub_port=55055,
9
8
  resource_monitoring_interval=3,
10
9
  )
11
10
  )
@@ -1,7 +1,7 @@
1
1
  from parsl.config import Config
2
- from parsl.providers import SlurmProvider
3
- from parsl.launchers import SrunLauncher
4
2
  from parsl.executors import HighThroughputExecutor
3
+ from parsl.launchers import SrunLauncher
4
+ from parsl.providers import SlurmProvider
5
5
 
6
6
  from .user_opts import user_opts
7
7
 
@@ -1,8 +1,8 @@
1
- from parsl.providers import PBSProProvider
2
- from parsl.executors import HighThroughputExecutor
3
- from parsl.launchers import MpiRunLauncher
4
1
  from parsl.addresses import address_by_interface
5
2
  from parsl.config import Config
3
+ from parsl.executors import HighThroughputExecutor
4
+ from parsl.launchers import MpiRunLauncher
5
+ from parsl.providers import PBSProProvider
6
6
 
7
7
  from .user_opts import user_opts
8
8
 
@@ -1,6 +1,6 @@
1
1
  from parsl.config import Config
2
- from parsl.providers import CondorProvider
3
2
  from parsl.executors import HighThroughputExecutor
3
+ from parsl.providers import CondorProvider
4
4
 
5
5
  # If you are a developer running tests, make sure to update parsl/tests/configs/user_opts.py
6
6
  # If you are a user copying-and-pasting this as an example, make sure to either
@@ -1,10 +1,11 @@
1
+ import os
2
+
3
+ from parsl.addresses import address_by_route
1
4
  from parsl.config import Config
2
5
  from parsl.executors import HighThroughputExecutor
3
6
  from parsl.providers import KubernetesProvider
4
- from parsl.addresses import address_by_route
5
7
 
6
8
  from .user_opts import user_opts
7
- import os
8
9
 
9
10
 
10
11
  def fresh_config():
@@ -0,0 +1,24 @@
1
+ from parsl.config import Config
2
+ from parsl.executors import HighThroughputExecutor
3
+ from parsl.launchers import SrunLauncher
4
+ from parsl.providers import SlurmProvider
5
+
6
+
7
+ def fresh_config():
8
+ return Config(
9
+ executors=[
10
+ HighThroughputExecutor(
11
+ label="docker_slurm",
12
+ encrypted=True,
13
+ provider=SlurmProvider(
14
+ cmd_timeout=60, # Add extra time for slow scheduler responses
15
+ nodes_per_block=1,
16
+ init_blocks=1,
17
+ min_blocks=1,
18
+ max_blocks=1,
19
+ walltime='00:10:00',
20
+ launcher=SrunLauncher(),
21
+ ),
22
+ )
23
+ ],
24
+ )
@@ -4,6 +4,7 @@ from parsl.launchers import JsrunLauncher
4
4
  from parsl.providers import LSFProvider
5
5
 
6
6
  from .user_opts import user_opts
7
+
7
8
  """ This config assumes that it is used to launch parsl tasks from the login nodes
8
9
  of Frontera at TACC. Each job submitted to the scheduler will request 2 nodes for 10 minutes.
9
10
  """
@@ -1,13 +1,10 @@
1
1
  from parsl.config import Config
2
- from parsl.executors.taskvine import TaskVineExecutor
3
- from parsl.executors.taskvine import TaskVineManagerConfig
4
-
5
- from parsl.data_provider.http import HTTPInTaskStaging
6
- from parsl.data_provider.ftp import FTPInTaskStaging
7
2
  from parsl.data_provider.file_noop import NoOpFileStaging
3
+ from parsl.data_provider.ftp import FTPInTaskStaging
4
+ from parsl.data_provider.http import HTTPInTaskStaging
5
+ from parsl.executors.taskvine import TaskVineExecutor, TaskVineManagerConfig
8
6
 
9
7
 
10
8
  def fresh_config():
11
9
  return Config(executors=[TaskVineExecutor(manager_config=TaskVineManagerConfig(port=9000),
12
- worker_launch_method='factory',
13
- storage_access=[FTPInTaskStaging(), HTTPInTaskStaging(), NoOpFileStaging()])])
10
+ worker_launch_method='factory')])
@@ -135,13 +135,6 @@ user_opts = {
135
135
  # # For example:
136
136
  # 'remote_writeable': 'globus://af7bda53-6d04-11e5-ba46-22000b92c6ec/home/bzc/'
137
137
  # },
138
- # 'adhoc': {
139
- # # This specifies configuration parameters when testing an ad-hoc SSH based cluster
140
- # 'username': 'fixme', # username on remote systems
141
- # 'remote_hostnames': ['hostname1', 'hostname2'], # addresses of remote systems
142
- # 'worker_init': 'init commands', # worker_init for remote systems
143
- # 'script_dir': "/path" # script directory on remote systems
144
- # }
145
138
  #
146
139
  } # type: Dict[str, Any]
147
140
 
@@ -1,12 +1,10 @@
1
1
  from parsl.config import Config
2
- from parsl.executors import WorkQueueExecutor
3
-
4
- from parsl.data_provider.http import HTTPInTaskStaging
5
- from parsl.data_provider.ftp import FTPInTaskStaging
6
2
  from parsl.data_provider.file_noop import NoOpFileStaging
3
+ from parsl.data_provider.ftp import FTPInTaskStaging
4
+ from parsl.data_provider.http import HTTPInTaskStaging
5
+ from parsl.executors import WorkQueueExecutor
7
6
 
8
7
 
9
8
  def fresh_config():
10
9
  return Config(executors=[WorkQueueExecutor(port=9000,
11
- coprocess=True,
12
- storage_access=[FTPInTaskStaging(), HTTPInTaskStaging(), NoOpFileStaging()])])
10
+ coprocess=True)])
parsl/tests/conftest.py CHANGED
@@ -3,22 +3,24 @@ import itertools
3
3
  import logging
4
4
  import os
5
5
  import pathlib
6
+ import random
6
7
  import re
7
8
  import shutil
8
- import time
9
- import types
10
9
  import signal
10
+ import string
11
11
  import sys
12
12
  import tempfile
13
13
  import threading
14
+ import time
14
15
  import traceback
16
+ import types
15
17
  import typing as t
16
18
  from datetime import datetime
17
19
  from glob import glob
18
20
  from itertools import chain
19
21
 
20
- import pytest
21
22
  import _pytest.runner as runner
23
+ import pytest
22
24
 
23
25
  import parsl
24
26
  from parsl.dataflow.dflow import DataFlowKernelLoader
@@ -56,7 +58,7 @@ def tmpd_cwd_session(pytestconfig):
56
58
 
57
59
  config = re.sub(r"[^A-z0-9_-]+", "_", pytestconfig.getoption('config')[0])
58
60
  cwd = pathlib.Path(os.getcwd())
59
- pytest_dir = cwd / ".pytest"
61
+ pytest_dir = cwd / "pytest-parsl"
60
62
  pytest_dir.mkdir(mode=0o700, parents=True, exist_ok=True)
61
63
 
62
64
  test_dir_prefix = "parsltest-"
@@ -135,28 +137,31 @@ def pytest_configure(config):
135
137
  )
136
138
  config.addinivalue_line(
137
139
  'markers',
138
- 'noci: mark test to be unsuitable for running during automated tests'
140
+ 'cleannet: Enable tests that require a clean network connection (such as for testing FTP)'
139
141
  )
140
-
141
142
  config.addinivalue_line(
142
143
  'markers',
143
- 'cleannet: Enable tests that require a clean network connection (such as for testing FTP)'
144
+ 'staging_required: Marks tests that require a staging provider, when there is no sharedFS'
144
145
  )
145
146
  config.addinivalue_line(
146
147
  'markers',
147
- 'issue363: Marks tests that require a shared filesystem for stdout/stderr - see issue #363'
148
+ 'multiple_cores_required: Marks tests that require multiple cores, such as htex affinity'
148
149
  )
149
150
  config.addinivalue_line(
150
151
  'markers',
151
- 'staging_required: Marks tests that require a staging provider, when there is no sharedFS)'
152
+ 'unix_filesystem_permissions_required: Marks tests that require unix-level filesystem permission enforcement'
152
153
  )
153
154
  config.addinivalue_line(
154
155
  'markers',
155
- 'sshd_required: Marks tests that require a SSHD'
156
+ 'issue3328: Marks tests broken by issue #3328'
156
157
  )
157
158
  config.addinivalue_line(
158
159
  'markers',
159
- 'multiple_cores_required: Marks tests that require multiple cores, such as htex affinity'
160
+ 'executor_supports_std_stream_tuples: Marks tests that require tuple support for stdout/stderr'
161
+ )
162
+ config.addinivalue_line(
163
+ 'markers',
164
+ 'shared_fs: Marks tests that require a shared_fs between the workers are the test client'
160
165
  )
161
166
 
162
167
 
@@ -200,7 +205,7 @@ def load_dfk_session(request, pytestconfig, tmpd_cwd_session):
200
205
  if parsl.dfk() != dfk:
201
206
  raise RuntimeError("DFK changed unexpectedly during test")
202
207
  dfk.cleanup()
203
- parsl.clear()
208
+ assert DataFlowKernelLoader._dfk is None
204
209
  else:
205
210
  yield
206
211
 
@@ -246,12 +251,13 @@ def load_dfk_local_module(request, pytestconfig, tmpd_cwd_session):
246
251
 
247
252
  if callable(local_teardown):
248
253
  local_teardown()
254
+ assert DataFlowKernelLoader._dfk is None, "Expected teardown to clear DFK"
249
255
 
250
256
  if local_config:
251
257
  if parsl.dfk() != dfk:
252
258
  raise RuntimeError("DFK changed unexpectedly during test")
253
259
  dfk.cleanup()
254
- parsl.clear()
260
+ assert DataFlowKernelLoader._dfk is None
255
261
 
256
262
  else:
257
263
  yield
@@ -422,3 +428,11 @@ def try_assert():
422
428
  raise AssertionError("Bad assert call: no attempts or timeout period")
423
429
 
424
430
  yield _impl
431
+
432
+
433
+ @pytest.fixture
434
+ def randomstring():
435
+ def func(length=5, alphabet=string.ascii_letters):
436
+ return "".join(random.choice(alphabet) for _ in range(length))
437
+
438
+ return func
@@ -1,10 +1,9 @@
1
+ import argparse
2
+ import time
3
+
1
4
  import parsl
2
5
  from parsl import python_app
3
6
  from parsl.configs.htex_local import config
4
- # from parsl.configs.local_threads import config
5
-
6
- import time
7
- import argparse
8
7
 
9
8
 
10
9
  @python_app
@@ -1,14 +1,12 @@
1
1
  ''' Testing bash apps
2
2
  '''
3
- import parsl
4
- from parsl import python_app
5
-
6
- import time
7
3
  import argparse
4
+ import time
8
5
 
6
+ import parsl
7
+ from parsl import python_app
9
8
  from parsl.tests.configs.local_threads import config
10
9
 
11
-
12
10
  local_config = config
13
11
 
14
12
 
@@ -1,11 +1,10 @@
1
- from parsl.providers import LocalProvider
2
- from parsl.channels import LocalChannel
3
- # from parsl.launchers import SimpleLauncher
4
- from parsl.launchers import SingleNodeLauncher
5
-
6
1
  from parsl.config import Config
7
2
  from parsl.executors import HighThroughputExecutor
8
3
 
4
+ # from parsl.launchers import SimpleLauncher
5
+ from parsl.launchers import SingleNodeLauncher
6
+ from parsl.providers import LocalProvider
7
+
9
8
  config = Config(
10
9
  executors=[
11
10
  HighThroughputExecutor(
@@ -15,7 +14,6 @@ config = Config(
15
14
  cores_per_worker=1,
16
15
  encrypted=True,
17
16
  provider=LocalProvider(
18
- channel=LocalChannel(),
19
17
  init_blocks=1,
20
18
  max_blocks=1,
21
19
  # tasks_per_node=1, # For HighThroughputExecutor, this option should in most cases be 1
@@ -2,6 +2,7 @@ import argparse
2
2
  import time
3
3
 
4
4
  import parsl
5
+
5
6
  # Tested. Confirmed. Local X Local X SingleNodeLauncher
6
7
  # from parsl.tests.configs.local_ipp import config
7
8
 
@@ -1,6 +1,8 @@
1
1
  import argparse
2
- import parsl
3
2
  import logging
3
+
4
+ import parsl
5
+
4
6
  parsl.load()
5
7
 
6
8
  from parsl import python_app
@@ -1,15 +1,14 @@
1
1
  import argparse
2
- import parsl
3
- import psutil
4
2
  import multiprocessing
5
3
 
6
- from parsl.providers import LocalProvider
7
- from parsl.channels import LocalChannel
8
- from parsl.launchers import SingleNodeLauncher
9
- from parsl.config import Config
10
- from parsl.executors import HighThroughputExecutor
4
+ import psutil
11
5
 
6
+ import parsl
12
7
  from parsl.app.app import python_app # , bash_app
8
+ from parsl.config import Config
9
+ from parsl.executors import HighThroughputExecutor
10
+ from parsl.launchers import SingleNodeLauncher
11
+ from parsl.providers import LocalProvider
13
12
 
14
13
 
15
14
  @python_app
@@ -30,7 +29,6 @@ def test_simple(mem_per_worker):
30
29
  suppress_failure=True,
31
30
  encrypted=True,
32
31
  provider=LocalProvider(
33
- channel=LocalChannel(),
34
32
  init_blocks=1,
35
33
  max_blocks=1,
36
34
  launcher=SingleNodeLauncher(),
@@ -1,7 +1,8 @@
1
+ import time
2
+
1
3
  import pytest
2
4
 
3
5
  from parsl import DataFlowKernel, set_stream_logger
4
- import time
5
6
  from parsl.tests.configs.local_threads import config
6
7
 
7
8
 
@@ -1,9 +1,10 @@
1
+ import logging
2
+
3
+ import parsl
1
4
  from parsl import python_app
2
- from parsl.monitoring.monitoring import MonitoringHub
3
5
  from parsl.config import Config
4
6
  from parsl.executors import ThreadPoolExecutor
5
- import parsl
6
- import logging
7
+ from parsl.monitoring.monitoring import MonitoringHub
7
8
 
8
9
 
9
10
  def local_setup():
@@ -14,7 +15,6 @@ def local_setup():
14
15
  ],
15
16
  monitoring=MonitoringHub(
16
17
  hub_address="127.0.0.1",
17
- hub_port=55055,
18
18
  logging_level=logging.INFO,
19
19
  resource_monitoring_interval=10))
20
20
 
@@ -1,7 +1,7 @@
1
1
  import argparse
2
- import time
3
2
  import math
4
3
  import multiprocessing
4
+ import time
5
5
 
6
6
  import parsl
7
7
 
@@ -10,10 +10,11 @@ CORES_PER_WORKER = 1
10
10
  EXPECTED_WORKERS = math.floor(CORES / CORES_PER_WORKER)
11
11
 
12
12
 
13
+ from parsl.executors import HighThroughputExecutor
14
+
13
15
  # from parsl.tests.configs.htex_local import config
14
16
  from parsl.tests.manual_tests.htex_local import config
15
17
 
16
- from parsl.executors import HighThroughputExecutor
17
18
  assert isinstance(config.executors[0], HighThroughputExecutor)
18
19
  config.executors[0].cores_per_worker = CORES_PER_WORKER
19
20
  config.executors[0].provider.init_blocks = 1
@@ -1,8 +1,7 @@
1
- from parsl.providers import LocalProvider
2
- from parsl.channels import LocalChannel
3
-
4
1
  from parsl.config import Config
5
2
  from parsl.executors import HighThroughputExecutor
3
+ from parsl.providers import LocalProvider
4
+
6
5
  # import os
7
6
  config = Config(
8
7
  executors=[
@@ -12,7 +11,6 @@ config = Config(
12
11
  max_workers_per_node=8,
13
12
  encrypted=True,
14
13
  provider=LocalProvider(
15
- channel=LocalChannel(),
16
14
  init_blocks=1,
17
15
  max_blocks=1,
18
16
  ),
@@ -4,15 +4,6 @@ import argparse
4
4
  import time
5
5
 
6
6
  import parsl
7
-
8
- # from parsl.tests.configs.htex_local import config
9
- # from htex_local import config
10
- # from parsl.configs.local_threads import config
11
- # from parsl.configs.local_ipp import config
12
-
13
- # parsl.set_stream_logger()
14
- # config.executors[0].provider.tasks_per_node = 4
15
- # parsl.load(config)
16
7
  from parsl.app.app import python_app # , bash_app
17
8
 
18
9