parsl 2024.5.27__py3-none-any.whl → 2024.6.3__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 (283) hide show
  1. parsl/__init__.py +9 -10
  2. parsl/addresses.py +6 -4
  3. parsl/app/app.py +3 -6
  4. parsl/app/bash.py +4 -4
  5. parsl/app/errors.py +5 -3
  6. parsl/app/futures.py +3 -3
  7. parsl/app/python.py +2 -1
  8. parsl/benchmark/perf.py +2 -1
  9. parsl/channels/__init__.py +2 -2
  10. parsl/channels/base.py +0 -1
  11. parsl/channels/errors.py +2 -1
  12. parsl/channels/oauth_ssh/oauth_ssh.py +4 -3
  13. parsl/channels/ssh/ssh.py +9 -1
  14. parsl/channels/ssh_il/ssh_il.py +1 -0
  15. parsl/concurrent/__init__.py +2 -2
  16. parsl/config.py +5 -5
  17. parsl/configs/ASPIRE1.py +3 -3
  18. parsl/configs/Azure.py +6 -7
  19. parsl/configs/ad_hoc.py +4 -3
  20. parsl/configs/bridges.py +3 -3
  21. parsl/configs/cc_in2p3.py +2 -2
  22. parsl/configs/ec2.py +1 -1
  23. parsl/configs/expanse.py +1 -2
  24. parsl/configs/frontera.py +2 -3
  25. parsl/configs/htex_local.py +1 -2
  26. parsl/configs/illinoiscluster.py +1 -1
  27. parsl/configs/kubernetes.py +1 -2
  28. parsl/configs/midway.py +3 -3
  29. parsl/configs/osg.py +1 -1
  30. parsl/configs/polaris.py +1 -1
  31. parsl/configs/stampede2.py +4 -5
  32. parsl/configs/summit.py +1 -3
  33. parsl/configs/toss3_llnl.py +1 -2
  34. parsl/configs/vineex_local.py +3 -3
  35. parsl/configs/wqex_local.py +2 -2
  36. parsl/data_provider/data_manager.py +3 -3
  37. parsl/data_provider/file_noop.py +1 -2
  38. parsl/data_provider/files.py +3 -3
  39. parsl/data_provider/ftp.py +1 -3
  40. parsl/data_provider/globus.py +7 -6
  41. parsl/data_provider/http.py +2 -2
  42. parsl/data_provider/rsync.py +1 -1
  43. parsl/data_provider/staging.py +2 -2
  44. parsl/data_provider/zip.py +4 -5
  45. parsl/dataflow/dflow.py +21 -16
  46. parsl/dataflow/errors.py +2 -1
  47. parsl/dataflow/futures.py +1 -2
  48. parsl/dataflow/memoization.py +5 -5
  49. parsl/dataflow/rundirs.py +1 -1
  50. parsl/dataflow/taskrecord.py +4 -5
  51. parsl/executors/__init__.py +3 -3
  52. parsl/executors/base.py +1 -0
  53. parsl/executors/flux/execute_parsl_task.py +2 -2
  54. parsl/executors/flux/executor.py +11 -12
  55. parsl/executors/flux/flux_instance_manager.py +3 -3
  56. parsl/executors/high_throughput/executor.py +29 -35
  57. parsl/executors/high_throughput/interchange.py +16 -18
  58. parsl/executors/high_throughput/manager_record.py +1 -0
  59. parsl/executors/high_throughput/monitoring_info.py +2 -1
  60. parsl/executors/high_throughput/mpi_executor.py +5 -2
  61. parsl/executors/high_throughput/mpi_prefix_composer.py +1 -1
  62. parsl/executors/high_throughput/mpi_resource_management.py +1 -2
  63. parsl/executors/high_throughput/probe.py +6 -4
  64. parsl/executors/high_throughput/process_worker_pool.py +31 -20
  65. parsl/executors/high_throughput/zmq_pipes.py +28 -14
  66. parsl/executors/radical/executor.py +15 -15
  67. parsl/executors/radical/rpex_master.py +1 -2
  68. parsl/executors/radical/rpex_resources.py +1 -2
  69. parsl/executors/radical/rpex_worker.py +2 -1
  70. parsl/executors/status_handling.py +5 -4
  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 +23 -24
  75. parsl/executors/taskvine/factory.py +1 -1
  76. parsl/executors/taskvine/manager.py +11 -13
  77. parsl/executors/threads.py +4 -5
  78. parsl/executors/workqueue/errors.py +1 -1
  79. parsl/executors/workqueue/exec_parsl_function.py +5 -4
  80. parsl/executors/workqueue/executor.py +26 -27
  81. parsl/executors/workqueue/parsl_coprocess.py +1 -1
  82. parsl/jobs/error_handlers.py +1 -1
  83. parsl/jobs/job_status_poller.py +2 -5
  84. parsl/jobs/states.py +1 -1
  85. parsl/jobs/strategy.py +2 -2
  86. parsl/launchers/__init__.py +12 -3
  87. parsl/launchers/errors.py +1 -1
  88. parsl/log_utils.py +1 -2
  89. parsl/monitoring/db_manager.py +16 -10
  90. parsl/monitoring/monitoring.py +11 -15
  91. parsl/monitoring/queries/pandas.py +1 -2
  92. parsl/monitoring/radios.py +2 -4
  93. parsl/monitoring/remote.py +13 -8
  94. parsl/monitoring/router.py +8 -11
  95. parsl/monitoring/types.py +2 -0
  96. parsl/monitoring/visualization/app.py +4 -2
  97. parsl/monitoring/visualization/models.py +0 -1
  98. parsl/monitoring/visualization/plots/default/workflow_plots.py +8 -4
  99. parsl/monitoring/visualization/plots/default/workflow_resource_plots.py +1 -0
  100. parsl/monitoring/visualization/utils.py +0 -1
  101. parsl/monitoring/visualization/views.py +16 -9
  102. parsl/multiprocessing.py +0 -1
  103. parsl/process_loggers.py +1 -2
  104. parsl/providers/__init__.py +9 -12
  105. parsl/providers/ad_hoc/ad_hoc.py +1 -1
  106. parsl/providers/aws/aws.py +2 -3
  107. parsl/providers/azure/azure.py +4 -5
  108. parsl/providers/base.py +1 -1
  109. parsl/providers/cluster_provider.py +1 -1
  110. parsl/providers/cobalt/cobalt.py +3 -3
  111. parsl/providers/condor/condor.py +4 -2
  112. parsl/providers/errors.py +2 -2
  113. parsl/providers/googlecloud/googlecloud.py +2 -1
  114. parsl/providers/grid_engine/grid_engine.py +2 -2
  115. parsl/providers/kubernetes/kube.py +5 -3
  116. parsl/providers/local/local.py +5 -1
  117. parsl/providers/lsf/lsf.py +2 -2
  118. parsl/providers/pbspro/pbspro.py +1 -1
  119. parsl/providers/slurm/slurm.py +5 -5
  120. parsl/providers/torque/torque.py +1 -1
  121. parsl/serialize/__init__.py +8 -3
  122. parsl/serialize/base.py +1 -2
  123. parsl/serialize/concretes.py +5 -4
  124. parsl/serialize/proxystore.py +3 -2
  125. parsl/tests/__init__.py +1 -1
  126. parsl/tests/configs/ad_hoc_cluster_htex.py +4 -4
  127. parsl/tests/configs/azure_single_node.py +4 -5
  128. parsl/tests/configs/bridges.py +3 -2
  129. parsl/tests/configs/cc_in2p3.py +2 -2
  130. parsl/tests/configs/comet.py +2 -1
  131. parsl/tests/configs/ec2_single_node.py +1 -2
  132. parsl/tests/configs/ec2_spot.py +1 -2
  133. parsl/tests/configs/frontera.py +3 -2
  134. parsl/tests/configs/htex_ad_hoc_cluster.py +2 -4
  135. parsl/tests/configs/htex_local.py +2 -3
  136. parsl/tests/configs/htex_local_alternate.py +8 -11
  137. parsl/tests/configs/htex_local_intask_staging.py +5 -7
  138. parsl/tests/configs/htex_local_rsync_staging.py +4 -6
  139. parsl/tests/configs/local_adhoc.py +1 -1
  140. parsl/tests/configs/local_radical.py +1 -3
  141. parsl/tests/configs/local_radical_mpi.py +2 -2
  142. parsl/tests/configs/midway.py +2 -2
  143. parsl/tests/configs/nscc_singapore.py +3 -3
  144. parsl/tests/configs/osg_htex.py +1 -1
  145. parsl/tests/configs/petrelkube.py +3 -2
  146. parsl/tests/configs/summit.py +1 -0
  147. parsl/tests/configs/swan_htex.py +2 -2
  148. parsl/tests/configs/taskvine_ex.py +3 -5
  149. parsl/tests/configs/theta.py +2 -2
  150. parsl/tests/configs/workqueue_ex.py +3 -4
  151. parsl/tests/conftest.py +4 -4
  152. parsl/tests/integration/test_channels/test_ssh_errors.py +1 -1
  153. parsl/tests/integration/test_stress/test_python_simple.py +3 -4
  154. parsl/tests/integration/test_stress/test_python_threads.py +3 -5
  155. parsl/tests/manual_tests/htex_local.py +4 -4
  156. parsl/tests/manual_tests/test_ad_hoc_htex.py +2 -1
  157. parsl/tests/manual_tests/test_basic.py +1 -0
  158. parsl/tests/manual_tests/test_fan_in_out_htex_remote.py +4 -4
  159. parsl/tests/manual_tests/test_log_filter.py +3 -1
  160. parsl/tests/manual_tests/test_memory_limits.py +6 -6
  161. parsl/tests/manual_tests/test_regression_220.py +2 -1
  162. parsl/tests/manual_tests/test_udp_simple.py +4 -3
  163. parsl/tests/manual_tests/test_worker_count.py +3 -2
  164. parsl/tests/scaling_tests/htex_local.py +2 -2
  165. parsl/tests/scaling_tests/test_scale.py +0 -9
  166. parsl/tests/scaling_tests/vineex_condor.py +1 -2
  167. parsl/tests/scaling_tests/vineex_local.py +1 -2
  168. parsl/tests/site_tests/test_provider.py +3 -1
  169. parsl/tests/site_tests/test_site.py +2 -0
  170. parsl/tests/sites/test_affinity.py +7 -5
  171. parsl/tests/sites/test_dynamic_executor.py +3 -3
  172. parsl/tests/sites/test_ec2.py +3 -2
  173. parsl/tests/sites/test_local_adhoc.py +2 -1
  174. parsl/tests/sites/test_worker_info.py +4 -3
  175. parsl/tests/test_aalst_patterns.py +0 -1
  176. parsl/tests/test_bash_apps/test_apptimeout.py +2 -2
  177. parsl/tests/test_bash_apps/test_error_codes.py +1 -4
  178. parsl/tests/test_bash_apps/test_memoize_ignore_args.py +1 -0
  179. parsl/tests/test_bash_apps/test_memoize_ignore_args_regr.py +2 -2
  180. parsl/tests/test_bash_apps/test_pipeline.py +1 -1
  181. parsl/tests/test_bash_apps/test_std_uri.py +4 -3
  182. parsl/tests/test_callables.py +2 -2
  183. parsl/tests/test_checkpointing/test_python_checkpoint_1.py +1 -0
  184. parsl/tests/test_checkpointing/test_python_checkpoint_2.py +2 -1
  185. parsl/tests/test_checkpointing/test_regression_239.py +1 -1
  186. parsl/tests/test_checkpointing/test_task_exit.py +1 -1
  187. parsl/tests/test_docs/test_from_slides.py +2 -2
  188. parsl/tests/test_docs/test_kwargs.py +1 -1
  189. parsl/tests/test_docs/test_tutorial_1.py +1 -2
  190. parsl/tests/test_docs/test_workflow1.py +2 -2
  191. parsl/tests/test_docs/test_workflow2.py +0 -1
  192. parsl/tests/test_error_handling/test_rand_fail.py +2 -2
  193. parsl/tests/test_error_handling/test_resource_spec.py +4 -2
  194. parsl/tests/test_error_handling/test_retries.py +2 -1
  195. parsl/tests/test_error_handling/test_retry_handler.py +1 -0
  196. parsl/tests/test_error_handling/test_retry_handler_failure.py +2 -1
  197. parsl/tests/test_error_handling/test_serialization_fail.py +1 -1
  198. parsl/tests/test_error_handling/test_wrap_with_logs.py +1 -0
  199. parsl/tests/test_flux.py +1 -1
  200. parsl/tests/test_htex/test_command_client_timeout.py +9 -12
  201. parsl/tests/test_htex/test_connected_blocks.py +3 -2
  202. parsl/tests/test_htex/test_cpu_affinity_explicit.py +5 -2
  203. parsl/tests/test_htex/test_disconnected_blocks.py +6 -4
  204. parsl/tests/test_htex/test_drain.py +5 -5
  205. parsl/tests/test_htex/test_htex.py +1 -2
  206. parsl/tests/test_htex/test_managers_command.py +3 -2
  207. parsl/tests/test_htex/test_multiple_disconnected_blocks.py +6 -4
  208. parsl/tests/test_monitoring/test_app_names.py +3 -2
  209. parsl/tests/test_monitoring/test_basic.py +4 -4
  210. parsl/tests/test_monitoring/test_db_locks.py +6 -3
  211. parsl/tests/test_monitoring/test_fuzz_zmq.py +6 -3
  212. parsl/tests/test_monitoring/test_htex_init_blocks_vs_monitoring.py +5 -5
  213. parsl/tests/test_monitoring/test_incomplete_futures.py +5 -3
  214. parsl/tests/test_monitoring/test_memoization_representation.py +4 -1
  215. parsl/tests/test_monitoring/test_stdouterr.py +4 -4
  216. parsl/tests/test_monitoring/test_viz_colouring.py +1 -0
  217. parsl/tests/test_mpi_apps/test_bad_mpi_config.py +1 -1
  218. parsl/tests/test_mpi_apps/test_mpi_mode_disabled.py +2 -0
  219. parsl/tests/test_mpi_apps/test_mpi_mode_enabled.py +7 -5
  220. parsl/tests/test_mpi_apps/test_mpi_prefix.py +4 -4
  221. parsl/tests/test_mpi_apps/test_mpi_scheduler.py +7 -2
  222. parsl/tests/test_mpi_apps/test_mpiex.py +4 -3
  223. parsl/tests/test_mpi_apps/test_resource_spec.py +9 -10
  224. parsl/tests/test_providers/test_cobalt_deprecation_warning.py +2 -0
  225. parsl/tests/test_providers/test_local_provider.py +2 -1
  226. parsl/tests/test_providers/test_pbspro_template.py +1 -1
  227. parsl/tests/test_providers/test_slurm_template.py +1 -1
  228. parsl/tests/test_providers/test_submiterror_deprecation.py +2 -1
  229. parsl/tests/test_python_apps/test_context_manager.py +4 -3
  230. parsl/tests/test_python_apps/test_dep_standard_futures.py +2 -1
  231. parsl/tests/test_python_apps/test_futures.py +2 -1
  232. parsl/tests/test_python_apps/test_join.py +0 -1
  233. parsl/tests/test_python_apps/test_lifted.py +3 -3
  234. parsl/tests/test_python_apps/test_memoize_bad_id_for_memo.py +1 -0
  235. parsl/tests/test_python_apps/test_pluggable_future_resolution.py +1 -1
  236. parsl/tests/test_radical/test_mpi_funcs.py +1 -1
  237. parsl/tests/test_regression/test_1480.py +2 -1
  238. parsl/tests/test_regression/test_1653.py +2 -1
  239. parsl/tests/test_regression/test_2652.py +1 -0
  240. parsl/tests/test_regression/test_69a.py +0 -1
  241. parsl/tests/test_regression/test_854.py +4 -2
  242. parsl/tests/test_regression/test_97_parallelism_0.py +1 -2
  243. parsl/tests/test_regression/test_98.py +0 -1
  244. parsl/tests/test_scaling/test_block_error_handler.py +9 -4
  245. parsl/tests/test_scaling/test_scale_down.py +2 -3
  246. parsl/tests/test_scaling/test_scale_down_htex_auto_scale.py +4 -5
  247. parsl/tests/test_scaling/test_scale_down_htex_unregistered.py +3 -4
  248. parsl/tests/test_scaling/test_shutdown_scalein.py +1 -2
  249. parsl/tests/test_serialization/test_2555_caching_deserializer.py +1 -1
  250. parsl/tests/test_serialization/test_basic.py +2 -1
  251. parsl/tests/test_serialization/test_htex_code_cache.py +3 -4
  252. parsl/tests/test_serialization/test_pack_resource_spec.py +2 -1
  253. parsl/tests/test_serialization/test_proxystore_configured.py +10 -5
  254. parsl/tests/test_serialization/test_proxystore_impl.py +5 -3
  255. parsl/tests/test_shutdown/test_kill_monitoring.py +3 -2
  256. parsl/tests/test_staging/staging_provider.py +2 -2
  257. parsl/tests/test_staging/test_1316.py +3 -2
  258. parsl/tests/test_staging/test_docs_1.py +1 -1
  259. parsl/tests/test_staging/test_docs_2.py +2 -1
  260. parsl/tests/test_staging/test_elaborate_noop_file.py +2 -2
  261. parsl/tests/test_staging/test_staging_https.py +2 -2
  262. parsl/tests/test_staging/test_staging_stdout.py +4 -3
  263. parsl/tests/test_staging/test_zip_in.py +6 -8
  264. parsl/tests/test_staging/test_zip_out.py +7 -9
  265. parsl/tests/test_staging/test_zip_to_zip.py +6 -8
  266. parsl/tests/test_summary.py +2 -1
  267. parsl/tests/test_thread_parallelism.py +0 -1
  268. parsl/tests/test_threads/test_configs.py +1 -1
  269. parsl/tests/test_threads/test_lazy_errors.py +2 -1
  270. parsl/usage_tracking/api.py +2 -3
  271. parsl/usage_tracking/usage.py +8 -18
  272. parsl/utils.py +13 -2
  273. parsl/version.py +1 -1
  274. {parsl-2024.5.27.data → parsl-2024.6.3.data}/scripts/exec_parsl_function.py +5 -4
  275. {parsl-2024.5.27.data → parsl-2024.6.3.data}/scripts/process_worker_pool.py +31 -20
  276. {parsl-2024.5.27.dist-info → parsl-2024.6.3.dist-info}/METADATA +2 -2
  277. parsl-2024.6.3.dist-info/RECORD +471 -0
  278. parsl-2024.5.27.dist-info/RECORD +0 -471
  279. {parsl-2024.5.27.data → parsl-2024.6.3.data}/scripts/parsl_coprocess.py +1 -1
  280. {parsl-2024.5.27.dist-info → parsl-2024.6.3.dist-info}/LICENSE +0 -0
  281. {parsl-2024.5.27.dist-info → parsl-2024.6.3.dist-info}/WHEEL +0 -0
  282. {parsl-2024.5.27.dist-info → parsl-2024.6.3.dist-info}/entry_points.txt +0 -0
  283. {parsl-2024.5.27.dist-info → parsl-2024.6.3.dist-info}/top_level.txt +0 -0
@@ -1,13 +1,18 @@
1
1
  #!/usr/bin/env python3
2
2
 
3
- import zmq
4
3
  import logging
5
4
  import threading
6
5
  import time
6
+ from typing import Optional
7
+
8
+ import zmq
7
9
 
8
10
  from parsl import curvezmq
9
11
  from parsl.errors import InternalConsistencyError
10
- from parsl.executors.high_throughput.errors import CommandClientBadError, CommandClientTimeoutError
12
+ from parsl.executors.high_throughput.errors import (
13
+ CommandClientBadError,
14
+ CommandClientTimeoutError,
15
+ )
11
16
 
12
17
  logger = logging.getLogger(__name__)
13
18
 
@@ -15,20 +20,23 @@ logger = logging.getLogger(__name__)
15
20
  class CommandClient:
16
21
  """ CommandClient
17
22
  """
18
- def __init__(self, zmq_context: curvezmq.ClientContext, ip_address, port_range):
23
+ def __init__(self, ip_address, port_range, cert_dir: Optional[str] = None):
19
24
  """
20
25
  Parameters
21
26
  ----------
22
27
 
23
- zmq_context: curvezmq.ClientContext
24
- CurveZMQ client context used to create secure sockets
25
28
  ip_address: str
26
29
  IP address of the client (where Parsl runs)
30
+
27
31
  port_range: tuple(int, int)
28
32
  Port range for the comms between client and interchange
29
33
 
34
+ cert_dir: str | None
35
+ Path to the certificate directory. Setting this to None will disable encryption.
36
+ default: None
37
+
30
38
  """
31
- self.zmq_context = zmq_context
39
+ self.zmq_context = curvezmq.ClientContext(cert_dir)
32
40
  self.ip_address = ip_address
33
41
  self.port_range = port_range
34
42
  self.port = None
@@ -119,20 +127,23 @@ class CommandClient:
119
127
  class TasksOutgoing:
120
128
  """ Outgoing task queue from the executor to the Interchange
121
129
  """
122
- def __init__(self, zmq_context: curvezmq.ClientContext, ip_address, port_range):
130
+ def __init__(self, ip_address, port_range, cert_dir: Optional[str] = None):
123
131
  """
124
132
  Parameters
125
133
  ----------
126
134
 
127
- zmq_context: curvezmq.ClientContext
128
- CurveZMQ client context used to create secure sockets
129
135
  ip_address: str
130
136
  IP address of the client (where Parsl runs)
137
+
131
138
  port_range: tuple(int, int)
132
139
  Port range for the comms between client and interchange
133
140
 
141
+ cert_dir: str | None
142
+ Path to the certificate directory. Setting this to None will disable encryption.
143
+ default: None
144
+
134
145
  """
135
- self.zmq_context = zmq_context
146
+ self.zmq_context = curvezmq.ClientContext(cert_dir)
136
147
  self.zmq_socket = self.zmq_context.socket(zmq.DEALER)
137
148
  self.zmq_socket.set_hwm(0)
138
149
  self.port = self.zmq_socket.bind_to_random_port("tcp://{}".format(ip_address),
@@ -172,20 +183,23 @@ class ResultsIncoming:
172
183
  """ Incoming results queue from the Interchange to the executor
173
184
  """
174
185
 
175
- def __init__(self, zmq_context: curvezmq.ClientContext, ip_address, port_range):
186
+ def __init__(self, ip_address, port_range, cert_dir: Optional[str] = None):
176
187
  """
177
188
  Parameters
178
189
  ----------
179
190
 
180
- zmq_context: curvezmq.ClientContext
181
- CurveZMQ client context used to create secure sockets
182
191
  ip_address: str
183
192
  IP address of the client (where Parsl runs)
193
+
184
194
  port_range: tuple(int, int)
185
195
  Port range for the comms between client and interchange
186
196
 
197
+ cert_dir: str | None
198
+ Path to the certificate directory. Setting this to None will disable encryption.
199
+ default: None
200
+
187
201
  """
188
- self.zmq_context = zmq_context
202
+ self.zmq_context = curvezmq.ClientContext(cert_dir)
189
203
  self.results_receiver = self.zmq_context.socket(zmq.DEALER)
190
204
  self.results_receiver.set_hwm(0)
191
205
  self.port = self.results_receiver.bind_to_random_port("tcp://{}".format(ip_address),
@@ -1,30 +1,30 @@
1
1
  """RadicalPilotExecutor builds on the RADICAL-Pilot/Parsl
2
2
  """
3
+ import inspect
4
+ import logging
3
5
  import os
4
- import sys
5
- import time
6
- import parsl
7
6
  import queue
8
- import logging
9
- import inspect
10
- import requests
11
- import typeguard
7
+ import sys
12
8
  import threading as mt
13
-
9
+ import time
10
+ from concurrent.futures import Future
14
11
  from functools import partial
15
- from typing import Optional, Dict
16
12
  from pathlib import Path, PosixPath
17
- from concurrent.futures import Future
13
+ from typing import Dict, Optional
14
+
15
+ import requests
16
+ import typeguard
18
17
 
18
+ import parsl
19
+ from parsl.app.errors import BashExitFailure, RemoteExceptionWrapper
19
20
  from parsl.app.python import timeout
20
- from .rpex_resources import ResourceConfig
21
21
  from parsl.data_provider.files import File
22
- from parsl.utils import RepresentationMixin
23
- from parsl.app.errors import BashExitFailure
24
22
  from parsl.executors.base import ParslExecutor
25
- from parsl.app.errors import RemoteExceptionWrapper
26
23
  from parsl.serialize import deserialize, pack_res_spec_apply_message
27
- from parsl.serialize.errors import SerializationError, DeserializationError
24
+ from parsl.serialize.errors import DeserializationError, SerializationError
25
+ from parsl.utils import RepresentationMixin
26
+
27
+ from .rpex_resources import ResourceConfig
28
28
 
29
29
  try:
30
30
  import radical.pilot as rp
@@ -2,9 +2,8 @@
2
2
 
3
3
  import sys
4
4
 
5
- import radical.utils as ru
6
5
  import radical.pilot as rp
7
-
6
+ import radical.utils as ru
8
7
 
9
8
  # ------------------------------------------------------------------------------
10
9
  #
@@ -1,6 +1,5 @@
1
- import sys
2
1
  import json
3
-
2
+ import sys
4
3
  from typing import List
5
4
 
6
5
  _setup_paths: List[str] = []
@@ -1,10 +1,11 @@
1
1
  import sys
2
+
2
3
  import radical.pilot as rp
3
4
 
4
5
  import parsl.app.errors as pe
5
6
  from parsl.app.bash import remote_side_bash_executor
6
- from parsl.serialize import unpack_res_spec_apply_message, serialize
7
7
  from parsl.executors.high_throughput.process_worker_pool import execute_task
8
+ from parsl.serialize import serialize, unpack_res_spec_apply_message
8
9
 
9
10
 
10
11
  class ParslWorker:
@@ -1,17 +1,18 @@
1
1
  from __future__ import annotations
2
+
2
3
  import datetime
3
4
  import logging
4
5
  import threading
5
6
  import time
6
- from itertools import compress
7
7
  from abc import abstractmethod, abstractproperty
8
8
  from concurrent.futures import Future
9
- from typing import List, Any, Dict, Optional, Sequence, Tuple, Union, Callable
9
+ from itertools import compress
10
+ from typing import Any, Callable, Dict, List, Optional, Sequence, Tuple, Union
10
11
 
11
12
  from parsl.executors.base import ParslExecutor
12
13
  from parsl.executors.errors import BadStateException, ScalingFailed
13
- from parsl.jobs.states import JobStatus, JobState
14
- from parsl.jobs.error_handlers import simple_error_handler, noop_error_handler
14
+ from parsl.jobs.error_handlers import noop_error_handler, simple_error_handler
15
+ from parsl.jobs.states import JobState, JobStatus
15
16
  from parsl.monitoring.message_type import MessageType
16
17
  from parsl.providers.base import ExecutionProvider
17
18
  from parsl.utils import AtomicIDCounter
@@ -1,5 +1,5 @@
1
1
  from parsl.executors.taskvine.executor import TaskVineExecutor
2
- from parsl.executors.taskvine.manager_config import TaskVineManagerConfig
3
2
  from parsl.executors.taskvine.factory_config import TaskVineFactoryConfig
3
+ from parsl.executors.taskvine.manager_config import TaskVineManagerConfig
4
4
 
5
5
  __all__ = ['TaskVineExecutor', 'TaskVineManagerConfig', 'TaskVineFactoryConfig']
@@ -1,5 +1,5 @@
1
- from parsl.errors import ParslError
2
1
  from parsl.app.errors import AppException
2
+ from parsl.errors import ParslError
3
3
 
4
4
 
5
5
  class TaskVineTaskFailure(AppException):
@@ -1,10 +1,10 @@
1
- import traceback
2
1
  import sys
2
+ import traceback
3
3
 
4
4
  from parsl.app.errors import RemoteExceptionWrapper
5
5
  from parsl.data_provider.files import File
6
- from parsl.utils import get_std_fname_mode
7
6
  from parsl.serialize import deserialize, serialize
7
+ from parsl.utils import get_std_fname_mode
8
8
 
9
9
  # This scripts executes a parsl function which is pickled in 4 files:
10
10
  #
@@ -3,46 +3,45 @@ Cooperative Computing Lab (CCL) at Notre Dame to provide a fault-tolerant,
3
3
  high-throughput system for delegating Parsl tasks to thousands of remote machines
4
4
  """
5
5
 
6
- # Import Python built-in libraries
7
- import threading
8
- import multiprocessing
9
- import logging
10
- import tempfile
11
6
  import hashlib
12
- import subprocess
7
+ import inspect
8
+ import itertools
9
+ import logging
10
+ import multiprocessing
13
11
  import os
14
12
  import queue
15
- import inspect
16
13
  import shutil
17
- import itertools
14
+ import subprocess
15
+ import tempfile
16
+
17
+ # Import Python built-in libraries
18
+ import threading
18
19
  import uuid
19
20
  from concurrent.futures import Future
20
- from typing import List, Optional, Union, Literal
21
+ from typing import List, Literal, Optional, Union
22
+
23
+ # Import other libraries
24
+ import typeguard
21
25
 
22
26
  # Import Parsl constructs
23
27
  import parsl.utils as putils
24
- from parsl.data_provider.staging import Staging
25
- from parsl.serialize import serialize, deserialize
28
+ from parsl.addresses import get_any_address
26
29
  from parsl.data_provider.files import File
30
+ from parsl.data_provider.staging import Staging
27
31
  from parsl.errors import OptionalModuleMissing
28
- from parsl.providers.base import ExecutionProvider
29
- from parsl.providers import LocalProvider, CondorProvider
30
- from parsl.process_loggers import wrap_with_logs
31
- from parsl.addresses import get_any_address
32
32
  from parsl.executors.errors import ExecutorError
33
33
  from parsl.executors.status_handling import BlockProviderExecutor
34
34
  from parsl.executors.taskvine import exec_parsl_function
35
- from parsl.executors.taskvine.manager_config import TaskVineManagerConfig
35
+ from parsl.executors.taskvine.errors import TaskVineManagerFailure, TaskVineTaskFailure
36
+ from parsl.executors.taskvine.factory import _taskvine_factory
36
37
  from parsl.executors.taskvine.factory_config import TaskVineFactoryConfig
37
- from parsl.executors.taskvine.errors import TaskVineTaskFailure
38
- from parsl.executors.taskvine.errors import TaskVineManagerFailure
39
- from parsl.executors.taskvine.utils import ParslTaskToVine
40
- from parsl.executors.taskvine.utils import ParslFileToVine
41
38
  from parsl.executors.taskvine.manager import _taskvine_submit_wait
42
- from parsl.executors.taskvine.factory import _taskvine_factory
43
-
44
- # Import other libraries
45
- import typeguard
39
+ from parsl.executors.taskvine.manager_config import TaskVineManagerConfig
40
+ from parsl.executors.taskvine.utils import ParslFileToVine, ParslTaskToVine
41
+ from parsl.process_loggers import wrap_with_logs
42
+ from parsl.providers import CondorProvider, LocalProvider
43
+ from parsl.providers.base import ExecutionProvider
44
+ from parsl.serialize import deserialize, serialize
46
45
 
47
46
  logger = logging.getLogger(__name__)
48
47
 
@@ -1,7 +1,7 @@
1
1
  import logging
2
2
 
3
- from parsl.process_loggers import wrap_with_logs
4
3
  from parsl.executors.taskvine.errors import TaskVineFactoryFailure
4
+ from parsl.process_loggers import wrap_with_logs
5
5
 
6
6
  # This try except clause prevents import errors
7
7
  # when TaskVine is not used in Parsl.
@@ -1,25 +1,23 @@
1
- import logging
2
1
  import hashlib
3
- import subprocess
2
+ import logging
4
3
  import os
5
4
  import queue
6
5
  import shutil
6
+ import subprocess
7
7
  import uuid
8
8
 
9
- from parsl.utils import setproctitle
10
- from parsl.process_loggers import wrap_with_logs
11
9
  from parsl.executors.taskvine import exec_parsl_function
12
- from parsl.executors.taskvine.utils import VineTaskToParsl
13
- from parsl.executors.taskvine.utils import run_parsl_function
10
+ from parsl.executors.taskvine.utils import VineTaskToParsl, run_parsl_function
11
+ from parsl.process_loggers import wrap_with_logs
12
+ from parsl.utils import setproctitle
14
13
 
15
14
  try:
16
- from ndcctools.taskvine import cvine
17
- from ndcctools.taskvine import Manager
18
- from ndcctools.taskvine import Task
19
- from ndcctools.taskvine import FunctionCall
20
- from ndcctools.taskvine.cvine import VINE_ALLOCATION_MODE_MAX_THROUGHPUT
21
- from ndcctools.taskvine.cvine import VINE_ALLOCATION_MODE_EXHAUSTIVE_BUCKETING
22
- from ndcctools.taskvine.cvine import VINE_ALLOCATION_MODE_MAX
15
+ from ndcctools.taskvine import FunctionCall, Manager, Task, cvine
16
+ from ndcctools.taskvine.cvine import (
17
+ VINE_ALLOCATION_MODE_EXHAUSTIVE_BUCKETING,
18
+ VINE_ALLOCATION_MODE_MAX,
19
+ VINE_ALLOCATION_MODE_MAX_THROUGHPUT,
20
+ )
23
21
  except ImportError:
24
22
  _taskvine_enabled = False
25
23
  else:
@@ -1,14 +1,13 @@
1
- import logging
2
- import typeguard
3
1
  import concurrent.futures as cf
4
-
2
+ import logging
5
3
  from typing import List, Optional
6
4
 
5
+ import typeguard
6
+
7
7
  from parsl.data_provider.staging import Staging
8
8
  from parsl.executors.base import ParslExecutor
9
- from parsl.utils import RepresentationMixin
10
9
  from parsl.executors.errors import UnsupportedFeatureError
11
-
10
+ from parsl.utils import RepresentationMixin
12
11
 
13
12
  logger = logging.getLogger(__name__)
14
13
 
@@ -1,7 +1,7 @@
1
1
  from typing import Optional
2
2
 
3
- from parsl.errors import ParslError
4
3
  from parsl.app.errors import AppException
4
+ from parsl.errors import ParslError
5
5
 
6
6
 
7
7
  class WorkQueueTaskFailure(AppException):
@@ -1,10 +1,11 @@
1
+ import pickle
2
+ import sys
3
+ import traceback
4
+
1
5
  from parsl.app.errors import RemoteExceptionWrapper
2
6
  from parsl.data_provider.files import File
3
- from parsl.utils import get_std_fname_mode
4
- import traceback
5
- import sys
6
- import pickle
7
7
  from parsl.serialize import serialize
8
+ from parsl.utils import get_std_fname_mode
8
9
 
9
10
  # This scripts executes a parsl function which is pickled in a file:
10
11
  #
@@ -3,50 +3,49 @@ Cooperative Computing Lab (CCL) at Notre Dame to provide a fault-tolerant,
3
3
  high-throughput system for delegating Parsl tasks to thousands of remote machines
4
4
  """
5
5
 
6
- import threading
7
- import multiprocessing
8
- import logging
9
- from concurrent.futures import Future
10
- from ctypes import c_bool
11
-
12
- import tempfile
13
6
  import hashlib
14
- import subprocess
7
+ import inspect
8
+ import itertools
9
+ import logging
10
+ import multiprocessing
15
11
  import os
16
- import socket
17
- import time
18
12
  import pickle
19
13
  import queue
20
- import inspect
21
14
  import shutil
22
- import itertools
15
+ import socket
16
+ import subprocess
17
+ import tempfile
18
+ import threading
19
+ import time
20
+ from collections import namedtuple
21
+ from concurrent.futures import Future
22
+ from ctypes import c_bool
23
+ from typing import Dict, List, Optional, Set, Union
24
+
25
+ import typeguard
23
26
 
24
- from parsl.serialize import pack_apply_message, deserialize
25
27
  import parsl.utils as putils
26
- from parsl.executors.errors import ExecutorError
27
28
  from parsl.data_provider.files import File
29
+ from parsl.data_provider.staging import Staging
28
30
  from parsl.errors import OptionalModuleMissing
31
+ from parsl.executors.errors import ExecutorError
29
32
  from parsl.executors.status_handling import BlockProviderExecutor
30
- from parsl.providers.base import ExecutionProvider
31
- from parsl.providers import LocalProvider, CondorProvider
32
33
  from parsl.executors.workqueue import exec_parsl_function
33
34
  from parsl.process_loggers import wrap_with_logs
35
+ from parsl.providers import CondorProvider, LocalProvider
36
+ from parsl.providers.base import ExecutionProvider
37
+ from parsl.serialize import deserialize, pack_apply_message
34
38
  from parsl.utils import setproctitle
35
39
 
36
- import typeguard
37
- from typing import Dict, List, Optional, Set, Union
38
- from parsl.data_provider.staging import Staging
39
-
40
- from .errors import WorkQueueTaskFailure
41
- from .errors import WorkQueueFailure
42
-
43
- from collections import namedtuple
40
+ from .errors import WorkQueueFailure, WorkQueueTaskFailure
44
41
 
45
42
  try:
46
43
  import work_queue as wq
47
- from work_queue import WorkQueue
48
- from work_queue import WORK_QUEUE_DEFAULT_PORT
49
- from work_queue import WORK_QUEUE_ALLOCATION_MODE_MAX_THROUGHPUT
44
+ from work_queue import (
45
+ WORK_QUEUE_ALLOCATION_MODE_MAX_THROUGHPUT,
46
+ WORK_QUEUE_DEFAULT_PORT,
47
+ WorkQueue,
48
+ )
50
49
  except ImportError:
51
50
  _work_queue_enabled = False
52
51
  WORK_QUEUE_DEFAULT_PORT = 0
@@ -1,8 +1,8 @@
1
1
  #! /usr/bin/env python3
2
2
 
3
- import socket
4
3
  import json
5
4
  import os
5
+ import socket
6
6
  import sys
7
7
 
8
8
  # If enabled, coprocess will print to stdout
@@ -3,8 +3,8 @@ from __future__ import annotations
3
3
  from typing import Dict, Tuple
4
4
 
5
5
  import parsl.executors.status_handling as status_handling
6
- from parsl.jobs.states import JobStatus, JobState
7
6
  from parsl.jobs.errors import TooManyJobFailuresError
7
+ from parsl.jobs.states import JobState, JobStatus
8
8
 
9
9
 
10
10
  def noop_error_handler(executor: status_handling.BlockProviderExecutor, status: Dict[str, JobStatus], threshold: int = 3) -> None:
@@ -1,13 +1,10 @@
1
1
  import logging
2
- from typing import List, Sequence, Optional, Union
2
+ from typing import List, Optional, Sequence, Union
3
3
 
4
- from parsl.jobs.strategy import Strategy
5
4
  from parsl.executors.status_handling import BlockProviderExecutor
6
-
7
-
5
+ from parsl.jobs.strategy import Strategy
8
6
  from parsl.utils import Timer
9
7
 
10
-
11
8
  logger = logging.getLogger(__name__)
12
9
 
13
10
 
parsl/jobs/states.py CHANGED
@@ -1,6 +1,6 @@
1
+ import logging
1
2
  import os
2
3
  from enum import IntEnum
3
- import logging
4
4
  from typing import Optional
5
5
 
6
6
  logger = logging.getLogger(__name__)
parsl/jobs/strategy.py CHANGED
@@ -1,7 +1,8 @@
1
1
  from __future__ import annotations
2
+
2
3
  import logging
3
- import time
4
4
  import math
5
+ import time
5
6
  import warnings
6
7
  from typing import Dict, List, Optional, Sequence, TypedDict
7
8
 
@@ -11,7 +12,6 @@ from parsl.executors.status_handling import BlockProviderExecutor
11
12
  from parsl.jobs.states import JobState
12
13
  from parsl.process_loggers import wrap_with_logs
13
14
 
14
-
15
15
  logger = logging.getLogger(__name__)
16
16
 
17
17
 
@@ -1,6 +1,15 @@
1
- from parsl.launchers.launchers import SimpleLauncher, SingleNodeLauncher, \
2
- SrunLauncher, AprunLauncher, SrunMPILauncher, WrappedLauncher, \
3
- GnuParallelLauncher, MpiExecLauncher, MpiRunLauncher, JsrunLauncher
1
+ from parsl.launchers.launchers import (
2
+ AprunLauncher,
3
+ GnuParallelLauncher,
4
+ JsrunLauncher,
5
+ MpiExecLauncher,
6
+ MpiRunLauncher,
7
+ SimpleLauncher,
8
+ SingleNodeLauncher,
9
+ SrunLauncher,
10
+ SrunMPILauncher,
11
+ WrappedLauncher,
12
+ )
4
13
 
5
14
  __all__ = ['SimpleLauncher',
6
15
  'WrappedLauncher',
parsl/launchers/errors.py CHANGED
@@ -1,5 +1,5 @@
1
- from parsl.providers.errors import ExecutionProviderException
2
1
  from parsl.launchers.base import Launcher
2
+ from parsl.providers.errors import ExecutionProviderException
3
3
 
4
4
 
5
5
  class BadLauncher(ExecutionProviderException, TypeError):
parsl/log_utils.py CHANGED
@@ -12,10 +12,9 @@ provided for logging:
12
12
  """
13
13
  import io
14
14
  import logging
15
- import typeguard
16
-
17
15
  from typing import Optional
18
16
 
17
+ import typeguard
19
18
 
20
19
  DEFAULT_FORMAT = (
21
20
  "%(created)f %(asctime)s %(processName)s-%(process)d "
@@ -1,15 +1,14 @@
1
+ import datetime
1
2
  import logging
2
- import threading
3
- import queue
4
3
  import os
4
+ import queue
5
+ import threading
5
6
  import time
6
- import datetime
7
-
8
7
  from typing import Any, Dict, List, Optional, Set, Tuple, TypeVar, cast
9
8
 
10
- from parsl.log_utils import set_file_logger
11
9
  from parsl.dataflow.states import States
12
10
  from parsl.errors import OptionalModuleMissing
11
+ from parsl.log_utils import set_file_logger
13
12
  from parsl.monitoring.message_type import MessageType
14
13
  from parsl.monitoring.types import MonitoringMessage, TaggedMonitoringMessage
15
14
  from parsl.process_loggers import wrap_with_logs
@@ -21,11 +20,18 @@ X = TypeVar('X')
21
20
 
22
21
  try:
23
22
  import sqlalchemy as sa
24
- from sqlalchemy import Column, Text, Float, Boolean, BigInteger, Integer, DateTime, PrimaryKeyConstraint, Table
25
- from sqlalchemy.orm import Mapper
26
- from sqlalchemy.orm import mapperlib
27
- from sqlalchemy.orm import sessionmaker
28
- from sqlalchemy.orm import declarative_base
23
+ from sqlalchemy import (
24
+ BigInteger,
25
+ Boolean,
26
+ Column,
27
+ DateTime,
28
+ Float,
29
+ Integer,
30
+ PrimaryKeyConstraint,
31
+ Table,
32
+ Text,
33
+ )
34
+ from sqlalchemy.orm import Mapper, declarative_base, mapperlib, sessionmaker
29
35
  except ImportError:
30
36
  _sqlalchemy_enabled = False
31
37
  else:
@@ -1,29 +1,25 @@
1
1
  from __future__ import annotations
2
2
 
3
- import os
4
- import time
5
3
  import logging
6
4
  import multiprocessing.synchronize as ms
7
- import typeguard
8
-
5
+ import os
9
6
  import queue
10
-
11
- from parsl.multiprocessing import ForkProcess, SizedQueue
12
- from multiprocessing import Process
13
- from multiprocessing import Event
7
+ import time
8
+ from multiprocessing import Event, Process
14
9
  from multiprocessing.queues import Queue
15
- from parsl.log_utils import set_file_logger
16
- from parsl.utils import RepresentationMixin
17
- from parsl.process_loggers import wrap_with_logs
18
- from parsl.utils import setproctitle
10
+ from typing import TYPE_CHECKING, Any, Optional, Tuple, Union, cast
19
11
 
20
- from parsl.serialize import deserialize
12
+ import typeguard
21
13
 
14
+ from parsl.log_utils import set_file_logger
15
+ from parsl.monitoring.message_type import MessageType
22
16
  from parsl.monitoring.radios import MultiprocessingQueueRadio
23
17
  from parsl.monitoring.router import router_starter
24
- from parsl.monitoring.message_type import MessageType
25
18
  from parsl.monitoring.types import AddressedMonitoringMessage
26
- from typing import cast, Any, Optional, Tuple, Union, TYPE_CHECKING
19
+ from parsl.multiprocessing import ForkProcess, SizedQueue
20
+ from parsl.process_loggers import wrap_with_logs
21
+ from parsl.serialize import deserialize
22
+ from parsl.utils import RepresentationMixin, setproctitle
27
23
 
28
24
  _db_manager_excepts: Optional[Exception]
29
25