parsl 2024.3.4__tar.gz → 2024.3.11__tar.gz

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