parsl 2024.7.8__tar.gz → 2024.7.22__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (483) hide show
  1. {parsl-2024.7.8/parsl.egg-info → parsl-2024.7.22}/PKG-INFO +2 -2
  2. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/dataflow/dflow.py +17 -0
  3. parsl-2024.7.22/parsl/executors/flux/flux_instance_manager.py +56 -0
  4. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/executors/high_throughput/executor.py +37 -20
  5. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/executors/high_throughput/process_worker_pool.py +21 -1
  6. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/executors/status_handling.py +29 -21
  7. parsl-2024.7.22/parsl/tests/test_channels/test_dfk_close.py +26 -0
  8. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/version.py +1 -1
  9. {parsl-2024.7.8 → parsl-2024.7.22/parsl.egg-info}/PKG-INFO +2 -2
  10. {parsl-2024.7.8 → parsl-2024.7.22}/parsl.egg-info/SOURCES.txt +1 -0
  11. parsl-2024.7.8/parsl/executors/flux/flux_instance_manager.py +0 -57
  12. {parsl-2024.7.8 → parsl-2024.7.22}/LICENSE +0 -0
  13. {parsl-2024.7.8 → parsl-2024.7.22}/MANIFEST.in +0 -0
  14. {parsl-2024.7.8 → parsl-2024.7.22}/README.rst +0 -0
  15. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/__init__.py +0 -0
  16. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/addresses.py +0 -0
  17. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/app/__init__.py +0 -0
  18. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/app/app.py +0 -0
  19. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/app/bash.py +0 -0
  20. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/app/errors.py +0 -0
  21. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/app/futures.py +0 -0
  22. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/app/python.py +0 -0
  23. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/benchmark/__init__.py +0 -0
  24. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/benchmark/perf.py +0 -0
  25. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/channels/__init__.py +0 -0
  26. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/channels/base.py +0 -0
  27. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/channels/errors.py +0 -0
  28. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/channels/local/__init__.py +0 -0
  29. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/channels/local/local.py +0 -0
  30. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/channels/oauth_ssh/__init__.py +0 -0
  31. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/channels/oauth_ssh/oauth_ssh.py +0 -0
  32. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/channels/ssh/__init__.py +0 -0
  33. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/channels/ssh/ssh.py +0 -0
  34. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/channels/ssh_il/__init__.py +0 -0
  35. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/channels/ssh_il/ssh_il.py +0 -0
  36. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/concurrent/__init__.py +0 -0
  37. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/config.py +0 -0
  38. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/configs/ASPIRE1.py +0 -0
  39. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/configs/Azure.py +0 -0
  40. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/configs/__init__.py +0 -0
  41. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/configs/ad_hoc.py +0 -0
  42. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/configs/bridges.py +0 -0
  43. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/configs/cc_in2p3.py +0 -0
  44. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/configs/ec2.py +0 -0
  45. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/configs/expanse.py +0 -0
  46. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/configs/frontera.py +0 -0
  47. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/configs/htex_local.py +0 -0
  48. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/configs/illinoiscluster.py +0 -0
  49. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/configs/kubernetes.py +0 -0
  50. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/configs/local_threads.py +0 -0
  51. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/configs/midway.py +0 -0
  52. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/configs/osg.py +0 -0
  53. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/configs/polaris.py +0 -0
  54. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/configs/stampede2.py +0 -0
  55. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/configs/summit.py +0 -0
  56. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/configs/toss3_llnl.py +0 -0
  57. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/configs/vineex_local.py +0 -0
  58. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/configs/wqex_local.py +0 -0
  59. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/curvezmq.py +0 -0
  60. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/data_provider/__init__.py +0 -0
  61. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/data_provider/data_manager.py +0 -0
  62. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/data_provider/file_noop.py +0 -0
  63. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/data_provider/files.py +0 -0
  64. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/data_provider/ftp.py +0 -0
  65. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/data_provider/globus.py +0 -0
  66. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/data_provider/http.py +0 -0
  67. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/data_provider/rsync.py +0 -0
  68. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/data_provider/staging.py +0 -0
  69. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/data_provider/zip.py +0 -0
  70. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/dataflow/__init__.py +0 -0
  71. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/dataflow/dependency_resolvers.py +0 -0
  72. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/dataflow/errors.py +0 -0
  73. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/dataflow/futures.py +0 -0
  74. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/dataflow/memoization.py +0 -0
  75. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/dataflow/rundirs.py +0 -0
  76. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/dataflow/states.py +0 -0
  77. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/dataflow/taskrecord.py +0 -0
  78. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/errors.py +0 -0
  79. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/executors/__init__.py +0 -0
  80. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/executors/base.py +0 -0
  81. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/executors/errors.py +0 -0
  82. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/executors/flux/__init__.py +0 -0
  83. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/executors/flux/execute_parsl_task.py +0 -0
  84. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/executors/flux/executor.py +0 -0
  85. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/executors/high_throughput/__init__.py +0 -0
  86. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/executors/high_throughput/errors.py +0 -0
  87. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/executors/high_throughput/interchange.py +0 -0
  88. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/executors/high_throughput/manager_record.py +0 -0
  89. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/executors/high_throughput/monitoring_info.py +0 -0
  90. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/executors/high_throughput/mpi_executor.py +0 -0
  91. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/executors/high_throughput/mpi_prefix_composer.py +0 -0
  92. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/executors/high_throughput/mpi_resource_management.py +0 -0
  93. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/executors/high_throughput/probe.py +0 -0
  94. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/executors/high_throughput/zmq_pipes.py +0 -0
  95. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/executors/radical/__init__.py +0 -0
  96. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/executors/radical/executor.py +0 -0
  97. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/executors/radical/rpex_resources.py +0 -0
  98. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/executors/radical/rpex_worker.py +0 -0
  99. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/executors/taskvine/__init__.py +0 -0
  100. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/executors/taskvine/errors.py +0 -0
  101. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/executors/taskvine/exec_parsl_function.py +0 -0
  102. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/executors/taskvine/executor.py +0 -0
  103. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/executors/taskvine/factory.py +0 -0
  104. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/executors/taskvine/factory_config.py +0 -0
  105. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/executors/taskvine/manager.py +0 -0
  106. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/executors/taskvine/manager_config.py +0 -0
  107. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/executors/taskvine/utils.py +0 -0
  108. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/executors/threads.py +0 -0
  109. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/executors/workqueue/__init__.py +0 -0
  110. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/executors/workqueue/errors.py +0 -0
  111. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/executors/workqueue/exec_parsl_function.py +0 -0
  112. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/executors/workqueue/executor.py +0 -0
  113. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/executors/workqueue/parsl_coprocess.py +0 -0
  114. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/executors/workqueue/parsl_coprocess_stub.py +0 -0
  115. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/jobs/__init__.py +0 -0
  116. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/jobs/error_handlers.py +0 -0
  117. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/jobs/errors.py +0 -0
  118. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/jobs/job_status_poller.py +0 -0
  119. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/jobs/states.py +0 -0
  120. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/jobs/strategy.py +0 -0
  121. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/launchers/__init__.py +0 -0
  122. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/launchers/base.py +0 -0
  123. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/launchers/errors.py +0 -0
  124. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/launchers/launchers.py +0 -0
  125. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/log_utils.py +0 -0
  126. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/monitoring/__init__.py +0 -0
  127. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/monitoring/db_manager.py +0 -0
  128. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/monitoring/message_type.py +0 -0
  129. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/monitoring/monitoring.py +0 -0
  130. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/monitoring/queries/__init__.py +0 -0
  131. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/monitoring/queries/pandas.py +0 -0
  132. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/monitoring/radios.py +0 -0
  133. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/monitoring/remote.py +0 -0
  134. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/monitoring/router.py +0 -0
  135. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/monitoring/types.py +0 -0
  136. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/monitoring/visualization/__init__.py +0 -0
  137. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/monitoring/visualization/app.py +0 -0
  138. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/monitoring/visualization/models.py +0 -0
  139. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/monitoring/visualization/plots/__init__.py +0 -0
  140. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/monitoring/visualization/plots/default/__init__.py +0 -0
  141. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/monitoring/visualization/plots/default/task_plots.py +0 -0
  142. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/monitoring/visualization/plots/default/workflow_plots.py +0 -0
  143. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/monitoring/visualization/plots/default/workflow_resource_plots.py +0 -0
  144. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/monitoring/visualization/static/parsl-logo-white.png +0 -0
  145. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/monitoring/visualization/static/parsl-monitor.css +0 -0
  146. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/monitoring/visualization/templates/app.html +0 -0
  147. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/monitoring/visualization/templates/dag.html +0 -0
  148. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/monitoring/visualization/templates/error.html +0 -0
  149. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/monitoring/visualization/templates/layout.html +0 -0
  150. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/monitoring/visualization/templates/resource_usage.html +0 -0
  151. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/monitoring/visualization/templates/task.html +0 -0
  152. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/monitoring/visualization/templates/workflow.html +0 -0
  153. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/monitoring/visualization/templates/workflows_summary.html +0 -0
  154. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/monitoring/visualization/utils.py +0 -0
  155. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/monitoring/visualization/version.py +0 -0
  156. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/monitoring/visualization/views.py +0 -0
  157. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/multiprocessing.py +0 -0
  158. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/process_loggers.py +0 -0
  159. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/providers/__init__.py +0 -0
  160. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/providers/ad_hoc/__init__.py +0 -0
  161. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/providers/ad_hoc/ad_hoc.py +0 -0
  162. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/providers/aws/__init__.py +0 -0
  163. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/providers/aws/aws.py +0 -0
  164. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/providers/aws/template.py +0 -0
  165. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/providers/azure/__init__.py +0 -0
  166. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/providers/azure/azure.py +0 -0
  167. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/providers/azure/template.py +0 -0
  168. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/providers/base.py +0 -0
  169. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/providers/cluster_provider.py +0 -0
  170. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/providers/cobalt/__init__.py +0 -0
  171. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/providers/cobalt/cobalt.py +0 -0
  172. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/providers/cobalt/template.py +0 -0
  173. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/providers/condor/__init__.py +0 -0
  174. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/providers/condor/condor.py +0 -0
  175. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/providers/condor/template.py +0 -0
  176. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/providers/errors.py +0 -0
  177. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/providers/googlecloud/__init__.py +0 -0
  178. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/providers/googlecloud/googlecloud.py +0 -0
  179. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/providers/grid_engine/__init__.py +0 -0
  180. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/providers/grid_engine/grid_engine.py +0 -0
  181. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/providers/grid_engine/template.py +0 -0
  182. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/providers/kubernetes/__init__.py +0 -0
  183. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/providers/kubernetes/kube.py +0 -0
  184. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/providers/kubernetes/template.py +0 -0
  185. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/providers/local/__init__.py +0 -0
  186. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/providers/local/local.py +0 -0
  187. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/providers/lsf/__init__.py +0 -0
  188. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/providers/lsf/lsf.py +0 -0
  189. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/providers/lsf/template.py +0 -0
  190. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/providers/pbspro/__init__.py +0 -0
  191. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/providers/pbspro/pbspro.py +0 -0
  192. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/providers/pbspro/template.py +0 -0
  193. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/providers/slurm/__init__.py +0 -0
  194. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/providers/slurm/slurm.py +0 -0
  195. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/providers/slurm/template.py +0 -0
  196. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/providers/torque/__init__.py +0 -0
  197. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/providers/torque/template.py +0 -0
  198. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/providers/torque/torque.py +0 -0
  199. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/py.typed +0 -0
  200. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/serialize/__init__.py +0 -0
  201. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/serialize/base.py +0 -0
  202. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/serialize/concretes.py +0 -0
  203. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/serialize/errors.py +0 -0
  204. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/serialize/facade.py +0 -0
  205. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/serialize/proxystore.py +0 -0
  206. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/__init__.py +0 -0
  207. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/callables_helper.py +0 -0
  208. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/configs/__init__.py +0 -0
  209. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/configs/ad_hoc_cluster_htex.py +0 -0
  210. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/configs/azure_single_node.py +0 -0
  211. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/configs/bluewaters.py +0 -0
  212. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/configs/bridges.py +0 -0
  213. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/configs/cc_in2p3.py +0 -0
  214. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/configs/comet.py +0 -0
  215. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/configs/cooley_htex.py +0 -0
  216. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/configs/ec2_single_node.py +0 -0
  217. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/configs/ec2_spot.py +0 -0
  218. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/configs/flux_local.py +0 -0
  219. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/configs/frontera.py +0 -0
  220. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/configs/htex_ad_hoc_cluster.py +0 -0
  221. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/configs/htex_local.py +0 -0
  222. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/configs/htex_local_alternate.py +0 -0
  223. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/configs/htex_local_intask_staging.py +0 -0
  224. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/configs/htex_local_rsync_staging.py +0 -0
  225. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/configs/local_adhoc.py +0 -0
  226. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/configs/local_radical.py +0 -0
  227. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/configs/local_radical_mpi.py +0 -0
  228. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/configs/local_threads.py +0 -0
  229. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/configs/local_threads_checkpoint.py +0 -0
  230. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/configs/local_threads_checkpoint_dfk_exit.py +0 -0
  231. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/configs/local_threads_checkpoint_periodic.py +0 -0
  232. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/configs/local_threads_checkpoint_task_exit.py +0 -0
  233. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/configs/local_threads_ftp_in_task.py +0 -0
  234. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/configs/local_threads_globus.py +0 -0
  235. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/configs/local_threads_http_in_task.py +0 -0
  236. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/configs/local_threads_monitoring.py +0 -0
  237. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/configs/local_threads_no_cache.py +0 -0
  238. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/configs/midway.py +0 -0
  239. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/configs/nscc_singapore.py +0 -0
  240. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/configs/osg_htex.py +0 -0
  241. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/configs/petrelkube.py +0 -0
  242. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/configs/summit.py +0 -0
  243. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/configs/swan_htex.py +0 -0
  244. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/configs/taskvine_ex.py +0 -0
  245. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/configs/theta.py +0 -0
  246. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/configs/user_opts.py +0 -0
  247. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/configs/workqueue_ex.py +0 -0
  248. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/conftest.py +0 -0
  249. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/integration/__init__.py +0 -0
  250. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/integration/latency.py +0 -0
  251. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/integration/test_apps/__init__.py +0 -0
  252. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/integration/test_channels/__init__.py +0 -0
  253. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/integration/test_channels/test_channels.py +0 -0
  254. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/integration/test_channels/test_local_channel.py +0 -0
  255. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/integration/test_channels/test_scp_1.py +0 -0
  256. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/integration/test_channels/test_ssh_1.py +0 -0
  257. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/integration/test_channels/test_ssh_errors.py +0 -0
  258. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/integration/test_channels/test_ssh_file_transport.py +0 -0
  259. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/integration/test_channels/test_ssh_interactive.py +0 -0
  260. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/integration/test_parsl_load_default_config.py +0 -0
  261. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/integration/test_stress/__init__.py +0 -0
  262. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/integration/test_stress/test_python_simple.py +0 -0
  263. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/integration/test_stress/test_python_threads.py +0 -0
  264. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/manual_tests/__init__.py +0 -0
  265. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/manual_tests/htex_local.py +0 -0
  266. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/manual_tests/test_ad_hoc_htex.py +0 -0
  267. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/manual_tests/test_basic.py +0 -0
  268. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/manual_tests/test_fan_in_out_htex_remote.py +0 -0
  269. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/manual_tests/test_log_filter.py +0 -0
  270. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/manual_tests/test_memory_limits.py +0 -0
  271. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/manual_tests/test_oauth_ssh.py +0 -0
  272. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/manual_tests/test_regression_220.py +0 -0
  273. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/manual_tests/test_udp_simple.py +0 -0
  274. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/manual_tests/test_worker_count.py +0 -0
  275. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/scaling_tests/__init__.py +0 -0
  276. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/scaling_tests/htex_local.py +0 -0
  277. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/scaling_tests/local_threads.py +0 -0
  278. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/scaling_tests/test_scale.py +0 -0
  279. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/scaling_tests/vineex_condor.py +0 -0
  280. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/scaling_tests/vineex_local.py +0 -0
  281. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/scaling_tests/wqex_condor.py +0 -0
  282. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/scaling_tests/wqex_local.py +0 -0
  283. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/site_tests/__init__.py +0 -0
  284. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/site_tests/site_config_selector.py +0 -0
  285. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/site_tests/test_provider.py +0 -0
  286. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/site_tests/test_site.py +0 -0
  287. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/sites/__init__.py +0 -0
  288. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/sites/test_affinity.py +0 -0
  289. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/sites/test_concurrent.py +0 -0
  290. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/sites/test_dynamic_executor.py +0 -0
  291. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/sites/test_ec2.py +0 -0
  292. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/sites/test_launchers.py +0 -0
  293. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/sites/test_local_adhoc.py +0 -0
  294. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/sites/test_mpi/__init__.py +0 -0
  295. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/sites/test_worker_info.py +0 -0
  296. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_aalst_patterns.py +0 -0
  297. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_bash_apps/__init__.py +0 -0
  298. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_bash_apps/test_apptimeout.py +0 -0
  299. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_bash_apps/test_basic.py +0 -0
  300. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_bash_apps/test_error_codes.py +0 -0
  301. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_bash_apps/test_inputs_default.py +0 -0
  302. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_bash_apps/test_keyword_overlaps.py +0 -0
  303. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_bash_apps/test_kwarg_storage.py +0 -0
  304. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_bash_apps/test_memoize.py +0 -0
  305. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_bash_apps/test_memoize_ignore_args.py +0 -0
  306. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_bash_apps/test_memoize_ignore_args_regr.py +0 -0
  307. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_bash_apps/test_multiline.py +0 -0
  308. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_bash_apps/test_pipeline.py +0 -0
  309. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_bash_apps/test_std_uri.py +0 -0
  310. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_bash_apps/test_stdout.py +0 -0
  311. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_callables.py +0 -0
  312. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_channels/__init__.py +0 -0
  313. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_channels/test_large_output.py +0 -0
  314. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_checkpointing/__init__.py +0 -0
  315. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_checkpointing/test_periodic.py +0 -0
  316. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_checkpointing/test_python_checkpoint_1.py +0 -0
  317. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_checkpointing/test_python_checkpoint_2.py +0 -0
  318. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_checkpointing/test_python_checkpoint_3.py +0 -0
  319. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_checkpointing/test_regression_232.py +0 -0
  320. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_checkpointing/test_regression_233.py +0 -0
  321. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_checkpointing/test_regression_239.py +0 -0
  322. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_checkpointing/test_task_exit.py +0 -0
  323. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_curvezmq.py +0 -0
  324. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_docs/__init__.py +0 -0
  325. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_docs/test_from_slides.py +0 -0
  326. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_docs/test_kwargs.py +0 -0
  327. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_docs/test_tutorial_1.py +0 -0
  328. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_docs/test_workflow1.py +0 -0
  329. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_docs/test_workflow2.py +0 -0
  330. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_docs/test_workflow4.py +0 -0
  331. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_error_handling/__init__.py +0 -0
  332. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_error_handling/test_fail.py +0 -0
  333. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_error_handling/test_python_walltime.py +0 -0
  334. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_error_handling/test_rand_fail.py +0 -0
  335. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_error_handling/test_resource_spec.py +0 -0
  336. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_error_handling/test_retries.py +0 -0
  337. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_error_handling/test_retry_handler.py +0 -0
  338. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_error_handling/test_retry_handler_failure.py +0 -0
  339. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_error_handling/test_serialization_fail.py +0 -0
  340. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_error_handling/test_wrap_with_logs.py +0 -0
  341. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_flowcontrol/__init__.py +0 -0
  342. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_flux.py +0 -0
  343. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_htex/__init__.py +0 -0
  344. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_htex/test_basic.py +0 -0
  345. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_htex/test_command_client_timeout.py +0 -0
  346. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_htex/test_connected_blocks.py +0 -0
  347. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_htex/test_cpu_affinity_explicit.py +0 -0
  348. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_htex/test_disconnected_blocks.py +0 -0
  349. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_htex/test_drain.py +0 -0
  350. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_htex/test_htex.py +0 -0
  351. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_htex/test_manager_failure.py +0 -0
  352. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_htex/test_managers_command.py +0 -0
  353. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_htex/test_missing_worker.py +0 -0
  354. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_htex/test_multiple_disconnected_blocks.py +0 -0
  355. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_htex/test_worker_failure.py +0 -0
  356. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_htex/test_zmq_binding.py +0 -0
  357. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_monitoring/__init__.py +0 -0
  358. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_monitoring/test_app_names.py +0 -0
  359. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_monitoring/test_basic.py +0 -0
  360. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_monitoring/test_db_locks.py +0 -0
  361. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_monitoring/test_fuzz_zmq.py +0 -0
  362. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_monitoring/test_htex_init_blocks_vs_monitoring.py +0 -0
  363. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_monitoring/test_incomplete_futures.py +0 -0
  364. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_monitoring/test_memoization_representation.py +0 -0
  365. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_monitoring/test_stdouterr.py +0 -0
  366. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_monitoring/test_viz_colouring.py +0 -0
  367. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_mpi_apps/__init__.py +0 -0
  368. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_mpi_apps/test_bad_mpi_config.py +0 -0
  369. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_mpi_apps/test_mpi_mode_disabled.py +0 -0
  370. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_mpi_apps/test_mpi_mode_enabled.py +0 -0
  371. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_mpi_apps/test_mpi_prefix.py +0 -0
  372. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_mpi_apps/test_mpi_scheduler.py +0 -0
  373. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_mpi_apps/test_mpiex.py +0 -0
  374. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_mpi_apps/test_resource_spec.py +0 -0
  375. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_providers/__init__.py +0 -0
  376. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_providers/test_cobalt_deprecation_warning.py +0 -0
  377. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_providers/test_local_provider.py +0 -0
  378. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_providers/test_pbspro_template.py +0 -0
  379. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_providers/test_slurm_instantiate.py +0 -0
  380. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_providers/test_slurm_template.py +0 -0
  381. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_providers/test_submiterror_deprecation.py +0 -0
  382. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_python_apps/__init__.py +0 -0
  383. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_python_apps/test_arg_input_types.py +0 -0
  384. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_python_apps/test_basic.py +0 -0
  385. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_python_apps/test_context_manager.py +0 -0
  386. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_python_apps/test_dep_standard_futures.py +0 -0
  387. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_python_apps/test_dependencies.py +0 -0
  388. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_python_apps/test_dependencies_deep.py +0 -0
  389. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_python_apps/test_depfail_propagation.py +0 -0
  390. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_python_apps/test_fail.py +0 -0
  391. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_python_apps/test_fibonacci_iterative.py +0 -0
  392. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_python_apps/test_fibonacci_recursive.py +0 -0
  393. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_python_apps/test_futures.py +0 -0
  394. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_python_apps/test_garbage_collect.py +0 -0
  395. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_python_apps/test_import_fail.py +0 -0
  396. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_python_apps/test_inputs_default.py +0 -0
  397. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_python_apps/test_join.py +0 -0
  398. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_python_apps/test_lifted.py +0 -0
  399. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_python_apps/test_mapred.py +0 -0
  400. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_python_apps/test_memoize_1.py +0 -0
  401. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_python_apps/test_memoize_2.py +0 -0
  402. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_python_apps/test_memoize_4.py +0 -0
  403. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_python_apps/test_memoize_bad_id_for_memo.py +0 -0
  404. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_python_apps/test_memoize_ignore_args.py +0 -0
  405. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_python_apps/test_memoize_joinapp.py +0 -0
  406. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_python_apps/test_outputs.py +0 -0
  407. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_python_apps/test_overview.py +0 -0
  408. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_python_apps/test_pipeline.py +0 -0
  409. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_python_apps/test_pluggable_future_resolution.py +0 -0
  410. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_python_apps/test_simple.py +0 -0
  411. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_python_apps/test_timeout.py +0 -0
  412. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_python_apps/test_type5.py +0 -0
  413. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_radical/__init__.py +0 -0
  414. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_radical/test_mpi_funcs.py +0 -0
  415. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_regression/__init__.py +0 -0
  416. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_regression/test_1480.py +0 -0
  417. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_regression/test_1606_wait_for_current_tasks.py +0 -0
  418. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_regression/test_1653.py +0 -0
  419. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_regression/test_221.py +0 -0
  420. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_regression/test_226.py +0 -0
  421. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_regression/test_2652.py +0 -0
  422. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_regression/test_69a.py +0 -0
  423. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_regression/test_854.py +0 -0
  424. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_regression/test_97_parallelism_0.py +0 -0
  425. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_regression/test_98.py +0 -0
  426. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_scaling/__init__.py +0 -0
  427. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_scaling/test_block_error_handler.py +0 -0
  428. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_scaling/test_regression_1621.py +0 -0
  429. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_scaling/test_scale_down.py +0 -0
  430. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_scaling/test_scale_down_htex_auto_scale.py +0 -0
  431. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_scaling/test_scale_down_htex_unregistered.py +0 -0
  432. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_scaling/test_shutdown_scalein.py +0 -0
  433. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_serialization/__init__.py +0 -0
  434. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_serialization/test_2555_caching_deserializer.py +0 -0
  435. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_serialization/test_3495_deserialize_managerlost.py +0 -0
  436. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_serialization/test_basic.py +0 -0
  437. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_serialization/test_htex_code_cache.py +0 -0
  438. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_serialization/test_pack_resource_spec.py +0 -0
  439. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_serialization/test_proxystore_configured.py +0 -0
  440. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_serialization/test_proxystore_impl.py +0 -0
  441. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_shutdown/__init__.py +0 -0
  442. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_shutdown/test_kill_monitoring.py +0 -0
  443. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_staging/__init__.py +0 -0
  444. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_staging/staging_provider.py +0 -0
  445. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_staging/test_1316.py +0 -0
  446. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_staging/test_docs_1.py +0 -0
  447. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_staging/test_docs_2.py +0 -0
  448. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_staging/test_elaborate_noop_file.py +0 -0
  449. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_staging/test_file.py +0 -0
  450. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_staging/test_file_apps.py +0 -0
  451. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_staging/test_file_staging.py +0 -0
  452. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_staging/test_output_chain_filenames.py +0 -0
  453. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_staging/test_staging_ftp.py +0 -0
  454. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_staging/test_staging_ftp_in_task.py +0 -0
  455. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_staging/test_staging_globus.py +0 -0
  456. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_staging/test_staging_https.py +0 -0
  457. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_staging/test_staging_stdout.py +0 -0
  458. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_staging/test_zip_in.py +0 -0
  459. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_staging/test_zip_out.py +0 -0
  460. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_staging/test_zip_to_zip.py +0 -0
  461. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_summary.py +0 -0
  462. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_thread_parallelism.py +0 -0
  463. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_threads/__init__.py +0 -0
  464. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_threads/test_configs.py +0 -0
  465. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_threads/test_lazy_errors.py +0 -0
  466. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_utils/__init__.py +0 -0
  467. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/test_utils/test_representation_mixin.py +0 -0
  468. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/unit/__init__.py +0 -0
  469. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/unit/test_file.py +0 -0
  470. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/unit/test_usage_tracking.py +0 -0
  471. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/tests/utils.py +0 -0
  472. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/usage_tracking/__init__.py +0 -0
  473. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/usage_tracking/api.py +0 -0
  474. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/usage_tracking/levels.py +0 -0
  475. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/usage_tracking/usage.py +0 -0
  476. {parsl-2024.7.8 → parsl-2024.7.22}/parsl/utils.py +0 -0
  477. {parsl-2024.7.8 → parsl-2024.7.22}/parsl.egg-info/dependency_links.txt +0 -0
  478. {parsl-2024.7.8 → parsl-2024.7.22}/parsl.egg-info/entry_points.txt +0 -0
  479. {parsl-2024.7.8 → parsl-2024.7.22}/parsl.egg-info/requires.txt +0 -0
  480. {parsl-2024.7.8 → parsl-2024.7.22}/parsl.egg-info/top_level.txt +0 -0
  481. {parsl-2024.7.8 → parsl-2024.7.22}/requirements.txt +0 -0
  482. {parsl-2024.7.8 → parsl-2024.7.22}/setup.cfg +0 -0
  483. {parsl-2024.7.8 → parsl-2024.7.22}/setup.py +0 -0
@@ -1,9 +1,9 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: parsl
3
- Version: 2024.7.8
3
+ Version: 2024.7.22
4
4
  Summary: Simple data dependent workflows in Python
5
5
  Home-page: https://github.com/Parsl/parsl
6
- Download-URL: https://github.com/Parsl/parsl/archive/2024.07.08.tar.gz
6
+ Download-URL: https://github.com/Parsl/parsl/archive/2024.07.22.tar.gz
7
7
  Author: The Parsl Team
8
8
  Author-email: parsl@googlegroups.com
9
9
  License: Apache 2.0
@@ -1277,6 +1277,23 @@ class DataFlowKernel:
1277
1277
  executor.shutdown()
1278
1278
  logger.info(f"Shut down executor {executor.label}")
1279
1279
 
1280
+ if hasattr(executor, 'provider'):
1281
+ if hasattr(executor.provider, 'script_dir'):
1282
+ logger.info(f"Closing channel(s) for {executor.label}")
1283
+
1284
+ if hasattr(executor.provider, 'channels'):
1285
+ for channel in executor.provider.channels:
1286
+ logger.info(f"Closing channel {channel}")
1287
+ channel.close()
1288
+ logger.info(f"Closed channel {channel}")
1289
+ else:
1290
+ assert hasattr(executor.provider, 'channel'), "If provider has no .channels, it must have .channel"
1291
+ logger.info(f"Closing channel {executor.provider.channel}")
1292
+ executor.provider.channel.close()
1293
+ logger.info(f"Closed channel {executor.provider.channel}")
1294
+
1295
+ logger.info(f"Closed executor channel(s) for {executor.label}")
1296
+
1280
1297
  logger.info("Terminated executors")
1281
1298
  self.time_completed = datetime.datetime.now()
1282
1299
 
@@ -0,0 +1,56 @@
1
+ """Script meant to be the initial program of a Flux instance."""
2
+
3
+ import argparse
4
+ import logging
5
+ import os
6
+ from os.path import dirname
7
+ from socket import gethostbyname, gethostname
8
+
9
+ import zmq
10
+
11
+
12
+ def main():
13
+ """Run a Flux instance to completion.
14
+
15
+ Send the path to the Flux Python package and the URI of the
16
+ encapsulating Flux instance.
17
+ """
18
+ # flux imports only available when launched under Flux instance
19
+ import flux
20
+ import flux.job
21
+
22
+ logging.basicConfig(
23
+ level=logging.DEBUG, format="%(asctime)s [%(levelname)s] %(message)s"
24
+ )
25
+ parser = argparse.ArgumentParser()
26
+ parser.add_argument("protocol", help="Protocol of the parent executor's socket")
27
+ parser.add_argument("hostname", help="hostname of the parent executor's socket")
28
+ parser.add_argument("port", help="Port of the parent executor's socket")
29
+ args = parser.parse_args()
30
+ with zmq.Context() as context, context.socket(zmq.REQ) as socket:
31
+ socket.connect(
32
+ args.protocol + "://" + gethostbyname(args.hostname) + ":" + args.port
33
+ )
34
+ # send the path to the ``flux.job`` package
35
+ socket.send(dirname(dirname(os.path.realpath(flux.__file__))).encode())
36
+ logging.debug("Flux package path sent.")
37
+ # collect the encapsulating Flux instance's URI
38
+ local_uri = flux.Flux().attr_get("local-uri")
39
+ hostname = gethostname()
40
+ if args.hostname == hostname:
41
+ flux_uri = local_uri
42
+ else:
43
+ flux_uri = "ssh://" + gethostname() + local_uri.replace("local://", "")
44
+ logging.debug("Flux URI is %s", flux_uri)
45
+ response = socket.recv() # get acknowledgment
46
+ logging.debug("Received acknowledgment %s", response)
47
+ socket.send(flux_uri.encode()) # send URI
48
+ logging.debug("URI sent. Blocking for response...")
49
+ response = socket.recv() # wait for shutdown message
50
+ logging.debug("Response %s received, draining flux jobs...", response)
51
+ flux.Flux().rpc("job-manager.drain").get()
52
+ logging.debug("Flux jobs drained, exiting.")
53
+
54
+
55
+ if __name__ == "__main__":
56
+ main()
@@ -168,7 +168,8 @@ class HighThroughputExecutor(BlockProviderExecutor, RepresentationMixin, UsageIn
168
168
  | | | | batching | | |
169
169
  Parsl<---Fut-| | | load-balancing| result exception
170
170
  ^ | | | watchdogs | | |
171
- | | | Q_mngmnt | | V V
171
+ | | | Result | | | |
172
+ | | | Queue | | V V
172
173
  | | | Thread<--|-incoming_q<---|--- +---------+
173
174
  | | | | | |
174
175
  | | | | | |
@@ -429,20 +430,19 @@ class HighThroughputExecutor(BlockProviderExecutor, RepresentationMixin, UsageIn
429
430
  "127.0.0.1", self.interchange_port_range, self.cert_dir
430
431
  )
431
432
 
432
- self._queue_management_thread = None
433
- self._start_queue_management_thread()
433
+ self._result_queue_thread = None
434
+ self._start_result_queue_thread()
434
435
  self._start_local_interchange_process()
435
436
 
436
- logger.debug("Created management thread: {}".format(self._queue_management_thread))
437
+ logger.debug("Created result queue thread: %s", self._result_queue_thread)
437
438
 
438
439
  self.initialize_scaling()
439
440
 
440
441
  @wrap_with_logs
441
- def _queue_management_worker(self):
442
- """Listen to the queue for task status messages and handle them.
442
+ def _result_queue_worker(self):
443
+ """Listen to the queue for task result messages and handle them.
443
444
 
444
- Depending on the message, tasks will be updated with results, exceptions,
445
- or updates. It expects the following messages:
445
+ Depending on the message, tasks will be updated with results or exceptions.
446
446
 
447
447
  .. code:: python
448
448
 
@@ -459,7 +459,7 @@ class HighThroughputExecutor(BlockProviderExecutor, RepresentationMixin, UsageIn
459
459
 
460
460
  The `None` message is a die request.
461
461
  """
462
- logger.debug("Queue management worker starting")
462
+ logger.debug("Result queue worker starting")
463
463
 
464
464
  while not self.bad_state_is_set:
465
465
  try:
@@ -528,7 +528,7 @@ class HighThroughputExecutor(BlockProviderExecutor, RepresentationMixin, UsageIn
528
528
  else:
529
529
  raise BadMessage("Message received with unknown type {}".format(msg['type']))
530
530
 
531
- logger.info("Queue management worker finished")
531
+ logger.info("Result queue worker finished")
532
532
 
533
533
  def _start_local_interchange_process(self) -> None:
534
534
  """ Starts the interchange process locally
@@ -571,21 +571,21 @@ class HighThroughputExecutor(BlockProviderExecutor, RepresentationMixin, UsageIn
571
571
  raise Exception("Interchange failed to start")
572
572
  logger.debug("Got worker ports")
573
573
 
574
- def _start_queue_management_thread(self):
575
- """Method to start the management thread as a daemon.
574
+ def _start_result_queue_thread(self):
575
+ """Method to start the result queue thread as a daemon.
576
576
 
577
577
  Checks if a thread already exists, then starts it.
578
- Could be used later as a restart if the management thread dies.
578
+ Could be used later as a restart if the result queue thread dies.
579
579
  """
580
- if self._queue_management_thread is None:
581
- logger.debug("Starting queue management thread")
582
- self._queue_management_thread = threading.Thread(target=self._queue_management_worker, name="HTEX-Queue-Management-Thread")
583
- self._queue_management_thread.daemon = True
584
- self._queue_management_thread.start()
585
- logger.debug("Started queue management thread")
580
+ if self._result_queue_thread is None:
581
+ logger.debug("Starting result queue thread")
582
+ self._result_queue_thread = threading.Thread(target=self._result_queue_worker, name="HTEX-Result-Queue-Thread")
583
+ self._result_queue_thread.daemon = True
584
+ self._result_queue_thread.start()
585
+ logger.debug("Started result queue thread")
586
586
 
587
587
  else:
588
- logger.error("Management thread already exists, returning")
588
+ logger.error("Result queue thread already exists, returning")
589
589
 
590
590
  def hold_worker(self, worker_id: str) -> None:
591
591
  """Puts a worker on hold, preventing scheduling of additional tasks to it.
@@ -834,6 +834,23 @@ class HighThroughputExecutor(BlockProviderExecutor, RepresentationMixin, UsageIn
834
834
  logger.info("Unable to terminate Interchange process; sending SIGKILL")
835
835
  self.interchange_proc.kill()
836
836
 
837
+ logger.info("Closing ZMQ pipes")
838
+
839
+ # These pipes are used in a thread unsafe manner. If you have traced a
840
+ # problem to this block of code, you might consider what is happening
841
+ # with other threads that access these.
842
+
843
+ # incoming_q is not closed here because it is used by the results queue
844
+ # worker which is not shut down at this point.
845
+
846
+ if hasattr(self, 'outgoing_q'):
847
+ logger.info("Closing outgoing_q")
848
+ self.outgoing_q.close()
849
+
850
+ if hasattr(self, 'command_client'):
851
+ logger.info("Closing command client")
852
+ self.command_client.close()
853
+
837
854
  logger.info("Finished HighThroughputExecutor shutdown attempt")
838
855
 
839
856
  def get_usage_information(self):
@@ -9,6 +9,7 @@ import os
9
9
  import pickle
10
10
  import platform
11
11
  import queue
12
+ import subprocess
12
13
  import sys
13
14
  import threading
14
15
  import time
@@ -733,7 +734,26 @@ def worker(
733
734
 
734
735
  # If desired, pin to accelerator
735
736
  if accelerator is not None:
736
- os.environ["CUDA_VISIBLE_DEVICES"] = accelerator
737
+
738
+ # If CUDA devices, find total number of devices to allow for MPS
739
+ # See: https://developer.nvidia.com/system-management-interface
740
+ nvidia_smi_cmd = "nvidia-smi -L > /dev/null && nvidia-smi -L | wc -l"
741
+ nvidia_smi_ret = subprocess.run(nvidia_smi_cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
742
+ if nvidia_smi_ret.returncode == 0:
743
+ num_cuda_devices = int(nvidia_smi_ret.stdout.split()[0])
744
+ else:
745
+ num_cuda_devices = None
746
+
747
+ try:
748
+ if num_cuda_devices is not None:
749
+ procs_per_cuda_device = pool_size // num_cuda_devices
750
+ partitioned_accelerator = str(int(accelerator) // procs_per_cuda_device) # multiple workers will share a GPU
751
+ os.environ["CUDA_VISIBLE_DEVICES"] = partitioned_accelerator
752
+ logger.info(f'Pinned worker to partitioned cuda device: {partitioned_accelerator}')
753
+ else:
754
+ os.environ["CUDA_VISIBLE_DEVICES"] = accelerator
755
+ except (TypeError, ValueError, ZeroDivisionError):
756
+ os.environ["CUDA_VISIBLE_DEVICES"] = accelerator
737
757
  os.environ["ROCR_VISIBLE_DEVICES"] = accelerator
738
758
  os.environ["ZE_AFFINITY_MASK"] = accelerator
739
759
  os.environ["ZE_ENABLE_PCI_ID_DEVICE_ORDER"] = '1'
@@ -59,20 +59,28 @@ class BlockProviderExecutor(ParslExecutor):
59
59
  else:
60
60
  self.block_error_handler = block_error_handler
61
61
 
62
- # errors can happen during the submit call to the provider; this is used
63
- # to keep track of such errors so that they can be handled in one place
64
- # together with errors reported by status()
65
- self._simulated_status: Dict[str, JobStatus] = {}
66
62
  self._executor_bad_state = threading.Event()
67
63
  self._executor_exception: Optional[Exception] = None
68
64
 
69
65
  self._block_id_counter = AtomicIDCounter()
70
66
 
71
67
  self._tasks = {} # type: Dict[object, Future]
68
+
69
+ self._last_poll_time = 0.0
70
+
71
+ # these four structures track, in loosely coordinated fashion, the
72
+ # existence of blocks and jobs and how to map between their
73
+ # identifiers.
72
74
  self.blocks_to_job_id = {} # type: Dict[str, str]
73
75
  self.job_ids_to_block = {} # type: Dict[str, str]
74
76
 
75
- self._last_poll_time = 0.0
77
+ # errors can happen during the submit call to the provider; this is used
78
+ # to keep track of such errors so that they can be handled in one place
79
+ # together with errors reported by status()
80
+ self._simulated_status: Dict[str, JobStatus] = {}
81
+
82
+ # this stores an approximation (sometimes delayed) of the latest status
83
+ # of pending, active and recently terminated blocks
76
84
  self._status = {} # type: Dict[str, JobStatus]
77
85
 
78
86
  def _make_status_dict(self, block_ids: List[str], status_list: List[JobStatus]) -> Dict[str, JobStatus]:
@@ -113,20 +121,6 @@ class BlockProviderExecutor(ParslExecutor):
113
121
  raise NotImplementedError("Classes inheriting from BlockProviderExecutor must implement "
114
122
  "outstanding()")
115
123
 
116
- def status(self) -> Dict[str, JobStatus]:
117
- """Return the status of all jobs/blocks currently known to this executor.
118
-
119
- :return: a dictionary mapping block ids (in string) to job status
120
- """
121
- if self._provider:
122
- block_ids, job_ids = self._get_block_and_job_ids()
123
- status = self._make_status_dict(block_ids, self._provider.status(job_ids))
124
- else:
125
- status = {}
126
- status.update(self._simulated_status)
127
-
128
- return status
129
-
130
124
  def set_bad_state_and_fail_all(self, exception: Exception):
131
125
  """Allows external error handlers to mark this executor as irrecoverably bad and cause
132
126
  all tasks submitted to it now and in the future to fail. The executor is responsible
@@ -180,7 +174,7 @@ class BlockProviderExecutor(ParslExecutor):
180
174
  # Filters first iterable by bool values in second
181
175
  return list(compress(to_kill, killed))
182
176
 
183
- def scale_out(self, blocks: int = 1) -> List[str]:
177
+ def _scale_out(self, blocks: int = 1) -> List[str]:
184
178
  """Scales out the number of blocks by "blocks"
185
179
  """
186
180
  if not self.provider:
@@ -276,6 +270,20 @@ class BlockProviderExecutor(ParslExecutor):
276
270
  if delta_status:
277
271
  self.send_monitoring_info(delta_status)
278
272
 
273
+ def status(self) -> Dict[str, JobStatus]:
274
+ """Return the status of all jobs/blocks currently known to this executor.
275
+
276
+ :return: a dictionary mapping block ids (in string) to job status
277
+ """
278
+ if self._provider:
279
+ block_ids, job_ids = self._get_block_and_job_ids()
280
+ status = self._make_status_dict(block_ids, self._provider.status(job_ids))
281
+ else:
282
+ status = {}
283
+ status.update(self._simulated_status)
284
+
285
+ return status
286
+
279
287
  @property
280
288
  def status_facade(self) -> Dict[str, JobStatus]:
281
289
  """Return the status of all jobs/blocks of the executor of this poller.
@@ -304,7 +312,7 @@ class BlockProviderExecutor(ParslExecutor):
304
312
  return block_ids
305
313
 
306
314
  def scale_out_facade(self, n: int) -> List[str]:
307
- block_ids = self.scale_out(n)
315
+ block_ids = self._scale_out(n)
308
316
  if block_ids is not None:
309
317
  new_status = {}
310
318
  for block_id in block_ids:
@@ -0,0 +1,26 @@
1
+ from unittest.mock import Mock
2
+
3
+ import pytest
4
+
5
+ import parsl
6
+ from parsl.channels.base import Channel
7
+ from parsl.executors import HighThroughputExecutor
8
+ from parsl.providers import LocalProvider
9
+
10
+
11
+ @pytest.mark.local
12
+ def test_dfk_close():
13
+
14
+ mock_channel = Mock(spec=Channel)
15
+
16
+ # block settings all 0 because the mock channel won't be able to
17
+ # do anything to make a block exist
18
+ p = LocalProvider(channel=mock_channel, init_blocks=0, min_blocks=0, max_blocks=0)
19
+
20
+ e = HighThroughputExecutor(provider=p)
21
+
22
+ c = parsl.Config(executors=[e])
23
+ with parsl.load(c):
24
+ pass
25
+
26
+ assert mock_channel.close.called
@@ -3,4 +3,4 @@
3
3
  Year.Month.Day[alpha/beta/..]
4
4
  Alphas will be numbered like this -> 2024.12.10a0
5
5
  """
6
- VERSION = '2024.07.08'
6
+ VERSION = '2024.07.22'
@@ -1,9 +1,9 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: parsl
3
- Version: 2024.7.8
3
+ Version: 2024.7.22
4
4
  Summary: Simple data dependent workflows in Python
5
5
  Home-page: https://github.com/Parsl/parsl
6
- Download-URL: https://github.com/Parsl/parsl/archive/2024.07.08.tar.gz
6
+ Download-URL: https://github.com/Parsl/parsl/archive/2024.07.22.tar.gz
7
7
  Author: The Parsl Team
8
8
  Author-email: parsl@googlegroups.com
9
9
  License: Apache 2.0
@@ -319,6 +319,7 @@ parsl/tests/test_bash_apps/test_pipeline.py
319
319
  parsl/tests/test_bash_apps/test_std_uri.py
320
320
  parsl/tests/test_bash_apps/test_stdout.py
321
321
  parsl/tests/test_channels/__init__.py
322
+ parsl/tests/test_channels/test_dfk_close.py
322
323
  parsl/tests/test_channels/test_large_output.py
323
324
  parsl/tests/test_checkpointing/__init__.py
324
325
  parsl/tests/test_checkpointing/test_periodic.py
@@ -1,57 +0,0 @@
1
- """Script meant to be the initial program of a Flux instance."""
2
-
3
- import argparse
4
- import logging
5
- import os
6
- from os.path import dirname
7
- from socket import gethostbyname, gethostname
8
-
9
- import zmq
10
-
11
-
12
- def main():
13
- """Run a Flux instance to completion.
14
-
15
- Send the path to the Flux Python package and the URI of the
16
- encapsulating Flux instance.
17
- """
18
- # flux imports only available when launched under Flux instance
19
- import flux
20
- import flux.job
21
-
22
- logging.basicConfig(
23
- level=logging.DEBUG, format="%(asctime)s [%(levelname)s] %(message)s"
24
- )
25
- parser = argparse.ArgumentParser()
26
- parser.add_argument("protocol", help="Protocol of the parent executor's socket")
27
- parser.add_argument("hostname", help="hostname of the parent executor's socket")
28
- parser.add_argument("port", help="Port of the parent executor's socket")
29
- args = parser.parse_args()
30
- context = zmq.Context()
31
- socket = context.socket(zmq.REQ)
32
- socket.connect(
33
- args.protocol + "://" + gethostbyname(args.hostname) + ":" + args.port
34
- )
35
- # send the path to the ``flux.job`` package
36
- socket.send(dirname(dirname(os.path.realpath(flux.__file__))).encode())
37
- logging.debug("Flux package path sent.")
38
- # collect the encapsulating Flux instance's URI
39
- local_uri = flux.Flux().attr_get("local-uri")
40
- hostname = gethostname()
41
- if args.hostname == hostname:
42
- flux_uri = local_uri
43
- else:
44
- flux_uri = "ssh://" + gethostname() + local_uri.replace("local://", "")
45
- logging.debug("Flux URI is %s", flux_uri)
46
- response = socket.recv() # get acknowledgment
47
- logging.debug("Received acknowledgment %s", response)
48
- socket.send(flux_uri.encode()) # send URI
49
- logging.debug("URI sent. Blocking for response...")
50
- response = socket.recv() # wait for shutdown message
51
- logging.debug("Response %s received, draining flux jobs...", response)
52
- flux.Flux().rpc("job-manager.drain").get()
53
- logging.debug("Flux jobs drained, exiting.")
54
-
55
-
56
- if __name__ == "__main__":
57
- main()
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes