parsl 2024.3.4__py3-none-any.whl → 2024.3.18__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. parsl/addresses.py +3 -1
  2. parsl/config.py +4 -0
  3. parsl/dataflow/dflow.py +14 -7
  4. parsl/dataflow/taskrecord.py +3 -1
  5. parsl/executors/high_throughput/executor.py +34 -10
  6. parsl/executors/high_throughput/interchange.py +43 -10
  7. parsl/executors/high_throughput/manager_record.py +1 -0
  8. parsl/executors/high_throughput/process_worker_pool.py +48 -7
  9. parsl/executors/taskvine/executor.py +6 -3
  10. parsl/executors/taskvine/manager.py +1 -0
  11. parsl/executors/taskvine/manager_config.py +3 -4
  12. parsl/jobs/job_status_poller.py +4 -3
  13. parsl/jobs/strategy.py +2 -1
  14. parsl/launchers/launchers.py +6 -6
  15. parsl/log_utils.py +8 -4
  16. parsl/monitoring/db_manager.py +29 -7
  17. parsl/monitoring/monitoring.py +15 -54
  18. parsl/monitoring/remote.py +29 -0
  19. parsl/monitoring/visualization/models.py +7 -0
  20. parsl/monitoring/visualization/plots/default/workflow_plots.py +3 -0
  21. parsl/monitoring/visualization/views.py +2 -1
  22. parsl/providers/cluster_provider.py +1 -3
  23. parsl/providers/slurm/slurm.py +13 -2
  24. parsl/tests/configs/user_opts.py +5 -2
  25. parsl/tests/test_htex/test_drain.py +78 -0
  26. parsl/tests/test_monitoring/test_app_names.py +86 -0
  27. parsl/tests/test_scaling/test_scale_down_htex_auto_scale.py +3 -11
  28. parsl/usage_tracking/usage.py +5 -9
  29. parsl/utils.py +2 -2
  30. parsl/version.py +1 -1
  31. {parsl-2024.3.4.data → parsl-2024.3.18.data}/scripts/process_worker_pool.py +48 -7
  32. {parsl-2024.3.4.dist-info → parsl-2024.3.18.dist-info}/METADATA +2 -2
  33. {parsl-2024.3.4.dist-info → parsl-2024.3.18.dist-info}/RECORD +39 -38
  34. {parsl-2024.3.4.dist-info → parsl-2024.3.18.dist-info}/WHEEL +1 -1
  35. parsl/configs/bluewaters.py +0 -28
  36. {parsl-2024.3.4.data → parsl-2024.3.18.data}/scripts/exec_parsl_function.py +0 -0
  37. {parsl-2024.3.4.data → parsl-2024.3.18.data}/scripts/parsl_coprocess.py +0 -0
  38. {parsl-2024.3.4.dist-info → parsl-2024.3.18.dist-info}/LICENSE +0 -0
  39. {parsl-2024.3.4.dist-info → parsl-2024.3.18.dist-info}/entry_points.txt +0 -0
  40. {parsl-2024.3.4.dist-info → parsl-2024.3.18.dist-info}/top_level.txt +0 -0
@@ -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:
parsl/utils.py CHANGED
@@ -296,12 +296,12 @@ class Timer:
296
296
 
297
297
  """
298
298
 
299
- def __init__(self, callback: Callable, *args: Any, interval: int = 5, name: Optional[str] = None) -> None:
299
+ def __init__(self, callback: Callable, *args: Any, interval: Union[float, int] = 5, name: Optional[str] = None) -> None:
300
300
  """Initialize the Timer object.
301
301
  We start the timer thread here
302
302
 
303
303
  KWargs:
304
- - interval (int) : number of seconds between callback events
304
+ - interval (int or float) : number of seconds between callback events
305
305
  - name (str) : a base name to use when naming the started thread
306
306
  """
307
307
 
parsl/version.py CHANGED
@@ -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.18'
@@ -36,6 +36,7 @@ from parsl.executors.high_throughput.mpi_resource_management import (
36
36
  from parsl.executors.high_throughput.mpi_prefix_composer import compose_all, VALID_LAUNCHERS
37
37
 
38
38
  HEARTBEAT_CODE = (2 ** 32) - 1
39
+ DRAINED_CODE = (2 ** 32) - 2
39
40
 
40
41
 
41
42
  class Manager:
@@ -73,7 +74,8 @@ class Manager:
73
74
  enable_mpi_mode: bool = False,
74
75
  mpi_launcher: str = "mpiexec",
75
76
  available_accelerators: Sequence[str],
76
- cert_dir: Optional[str]):
77
+ cert_dir: Optional[str],
78
+ drain_period: Optional[int]):
77
79
  """
78
80
  Parameters
79
81
  ----------
@@ -138,6 +140,9 @@ class Manager:
138
140
 
139
141
  cert_dir : str | None
140
142
  Path to the certificate directory.
143
+
144
+ drain_period: int | None
145
+ Number of seconds to drain after TODO: could be a nicer timespec involving m,s,h qualifiers for user friendliness?
141
146
  """
142
147
 
143
148
  logger.info("Manager initializing")
@@ -227,6 +232,14 @@ class Manager:
227
232
  self.heartbeat_period = heartbeat_period
228
233
  self.heartbeat_threshold = heartbeat_threshold
229
234
  self.poll_period = poll_period
235
+
236
+ self.drain_time: float
237
+ if drain_period:
238
+ self.drain_time = self._start_time + drain_period
239
+ logger.info(f"Will request drain at {self.drain_time}")
240
+ else:
241
+ self.drain_time = float('inf')
242
+
230
243
  self.cpu_affinity = cpu_affinity
231
244
 
232
245
  # Define accelerator available, adjust worker count accordingly
@@ -262,10 +275,19 @@ class Manager:
262
275
  """ Send heartbeat to the incoming task queue
263
276
  """
264
277
  msg = {'type': 'heartbeat'}
278
+ # don't need to dumps and encode this every time - could do as a global on import?
265
279
  b_msg = json.dumps(msg).encode('utf-8')
266
280
  self.task_incoming.send(b_msg)
267
281
  logger.debug("Sent heartbeat")
268
282
 
283
+ def drain_to_incoming(self):
284
+ """ Send heartbeat to the incoming task queue
285
+ """
286
+ msg = {'type': 'drain'}
287
+ b_msg = json.dumps(msg).encode('utf-8')
288
+ self.task_incoming.send(b_msg)
289
+ logger.debug("Sent drain")
290
+
269
291
  @wrap_with_logs
270
292
  def pull_tasks(self, kill_event):
271
293
  """ Pull tasks from the incoming tasks zmq pipe onto the internal
@@ -298,6 +320,7 @@ class Manager:
298
320
  # time here are correctly copy-pasted from the relevant if
299
321
  # statements.
300
322
  next_interesting_event_time = min(last_beat + self.heartbeat_period,
323
+ self.drain_time,
301
324
  last_interchange_contact + self.heartbeat_threshold)
302
325
  try:
303
326
  pending_task_count = self.pending_task_queue.qsize()
@@ -312,6 +335,14 @@ class Manager:
312
335
  self.heartbeat_to_incoming()
313
336
  last_beat = time.time()
314
337
 
338
+ if self.drain_time and time.time() > self.drain_time:
339
+ logger.info("Requesting drain")
340
+ self.drain_to_incoming()
341
+ self.drain_time = None
342
+ # This will start the pool draining...
343
+ # Drained exit behaviour does not happen here. It will be
344
+ # driven by the interchange sending a DRAINED_CODE message.
345
+
315
346
  poll_duration_s = max(0, next_interesting_event_time - time.time())
316
347
  socks = dict(poller.poll(timeout=poll_duration_s * 1000))
317
348
 
@@ -322,7 +353,9 @@ class Manager:
322
353
 
323
354
  if tasks == HEARTBEAT_CODE:
324
355
  logger.debug("Got heartbeat from interchange")
325
-
356
+ elif tasks == DRAINED_CODE:
357
+ logger.info("Got fulled drained message from interchange - setting kill flag")
358
+ kill_event.set()
326
359
  else:
327
360
  task_recv_counter += len(tasks)
328
361
  logger.debug("Got executor tasks: {}, cumulative count of tasks: {}".format([t['task_id'] for t in tasks], task_recv_counter))
@@ -413,7 +446,9 @@ class Manager:
413
446
  raise WorkerLost(worker_id, platform.node())
414
447
  except Exception:
415
448
  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()))}
449
+ result_package = {'type': 'result',
450
+ 'task_id': task['task_id'],
451
+ 'exception': serialize(RemoteExceptionWrapper(*sys.exc_info()))}
417
452
  pkl_package = pickle.dumps(result_package)
418
453
  self.pending_result_queue.put(pkl_package)
419
454
  except KeyError:
@@ -488,9 +523,8 @@ class Manager:
488
523
  self._worker_watchdog_thread.start()
489
524
  self._monitoring_handler_thread.start()
490
525
 
491
- logger.info("Loop start")
526
+ logger.info("Manager threads started")
492
527
 
493
- # TODO : Add mechanism in this loop to stop the worker pool
494
528
  # This might need a multiprocessing event to signal back.
495
529
  self._kill_event.wait()
496
530
  logger.critical("Received kill event, terminating worker processes")
@@ -802,6 +836,8 @@ if __name__ == "__main__":
802
836
  help="Heartbeat period in seconds. Uses manager default unless set")
803
837
  parser.add_argument("--hb_threshold", default=120,
804
838
  help="Heartbeat threshold in seconds. Uses manager default unless set")
839
+ parser.add_argument("--drain_period", default=None,
840
+ help="Drain this pool after specified number of seconds. By default, does not drain.")
805
841
  parser.add_argument("--address_probe_timeout", default=30,
806
842
  help="Timeout to probe for viable address to interchange. Default: 30s")
807
843
  parser.add_argument("--poll", default=10,
@@ -822,7 +858,7 @@ if __name__ == "__main__":
822
858
  required=True,
823
859
  help="Whether/how workers should control CPU affinity.")
824
860
  parser.add_argument("--available-accelerators", type=str, nargs="*",
825
- help="Names of available accelerators")
861
+ help="Names of available accelerators, if not given assumed to be zero accelerators available", default=[])
826
862
  parser.add_argument("--enable_mpi_mode", action='store_true',
827
863
  help="Enable MPI mode")
828
864
  parser.add_argument("--mpi-launcher", type=str, choices=VALID_LAUNCHERS,
@@ -854,6 +890,7 @@ if __name__ == "__main__":
854
890
  logger.info("Prefetch capacity: {}".format(args.prefetch_capacity))
855
891
  logger.info("Heartbeat threshold: {}".format(args.hb_threshold))
856
892
  logger.info("Heartbeat period: {}".format(args.hb_period))
893
+ logger.info("Drain period: {}".format(args.drain_period))
857
894
  logger.info("CPU affinity: {}".format(args.cpu_affinity))
858
895
  logger.info("Accelerators: {}".format(" ".join(args.available_accelerators)))
859
896
  logger.info("enable_mpi_mode: {}".format(args.enable_mpi_mode))
@@ -867,10 +904,14 @@ if __name__ == "__main__":
867
904
  block_id=args.block_id,
868
905
  cores_per_worker=float(args.cores_per_worker),
869
906
  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),
907
+ max_workers_per_node=(
908
+ args.max_workers_per_node if args.max_workers_per_node == float('inf')
909
+ else int(args.max_workers_per_node)
910
+ ),
871
911
  prefetch_capacity=int(args.prefetch_capacity),
872
912
  heartbeat_threshold=int(args.hb_threshold),
873
913
  heartbeat_period=int(args.hb_period),
914
+ drain_period=None if args.drain_period == "None" else int(args.drain_period),
874
915
  poll_period=int(args.poll),
875
916
  cpu_affinity=args.cpu_affinity,
876
917
  enable_mpi_mode=args.enable_mpi_mode,
@@ -1,9 +1,9 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: parsl
3
- Version: 2024.3.4
3
+ Version: 2024.3.18
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.18.tar.gz
7
7
  Author: The Parsl Team
8
8
  Author-email: parsl@googlegroups.com
9
9
  License: Apache 2.0
@@ -1,14 +1,14 @@
1
1
  parsl/__init__.py,sha256=hq8rJmP59wzd9-yxaGcmq5gPpshOopH-Y1K0BkUBNY0,1843
2
- parsl/addresses.py,sha256=bkaRhM4IZ4iZzh6ZkRXPvCLKFkbJ6HX2AOjYyujCiO8,4814
3
- parsl/config.py,sha256=ysUWBfm9bygayHHdItaJbP4oozkHJJmVQVnWCt5igjE,6808
2
+ parsl/addresses.py,sha256=mO4u1kVxAnBHHIIUyqdzsOxT9aUsGeBP5PfAPkz3sug,4819
3
+ parsl/config.py,sha256=E90pKPeagHpIdk9XYifHqSpTAaKdDQN59NPDi8PrTAc,7038
4
4
  parsl/curvezmq.py,sha256=FtZEYP1IWDry39cH-tOKUm9TnaR1U7krOmvVYpATcOk,6939
5
5
  parsl/errors.py,sha256=SzINzQFZDBDbj9l-DPQznD0TbGkNhHIRAPkcBCogf_A,1019
6
- parsl/log_utils.py,sha256=AGem-dhQs5TYUyJg6GKkRuHxAw8FHhYlWB_0s7_ROw4,3175
6
+ parsl/log_utils.py,sha256=Ckeb7YiIoK0FA8dA5CsWJDe28i9Sf4sxhFwp__VsD3o,3274
7
7
  parsl/multiprocessing.py,sha256=hakfdg-sgxEjwloZeDrt6EhzwdzecvjJhkPHHxh8lII,1938
8
8
  parsl/process_loggers.py,sha256=1G3Rfrh5wuZNo2X03grG4kTYPGOxz7hHCyG6L_A3b0A,1137
9
9
  parsl/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
10
- parsl/utils.py,sha256=PyJSz5BTlWTmVt01V2ueJPQYnrHMUwJlilSmW40oUJw,10956
11
- parsl/version.py,sha256=ODY44drCZ6Fm8zGrPlvCOx5A8Gj1S9vNmgUi6ufUFKo,131
10
+ parsl/utils.py,sha256=A3WDMGaNB4ajVx_jCuc-74W6PFy4zswJy-pLE7u8Dz0,10979
11
+ parsl/version.py,sha256=dhmXAlQKRlQPsExiUS22Ca2clSFcL-0irfA1G-7kIyo,131
12
12
  parsl/app/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
13
13
  parsl/app/app.py,sha256=wAHchJetgnicT1pn0NJKDeDX0lV3vDFlG8cQd_Ciax4,8522
14
14
  parsl/app/bash.py,sha256=bx9x1XFwkOTpZZD3CPwnVL9SyNRDjbUGtOnuGLvxN_8,5396
@@ -33,7 +33,6 @@ parsl/configs/ASPIRE1.py,sha256=jZXNH2dWTv3gDdQ4EB7j3nQB-iDn6ADIOj9BOidxbRo,1637
33
33
  parsl/configs/Azure.py,sha256=0QJeM7TvMIpSBl-S_qAOAKwnmiwtHYY_D4kHDjKHkp0,1192
34
34
  parsl/configs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
35
35
  parsl/configs/ad_hoc.py,sha256=tN07tj1GnZeVKTSemT77j1YUk1r0IF744Idvfq2Y9YM,1275
36
- parsl/configs/bluewaters.py,sha256=iQEYxsm4V3nEY8o-d2npxi9UzZ7WohIFvuK8TXaPlSo,891
37
36
  parsl/configs/bridges.py,sha256=ZRMUe5l23c71rRYPYh6vO6BGFnewWuGPYO4nC1ydryI,1446
38
37
  parsl/configs/cc_in2p3.py,sha256=Vqn_v7xGB18JzC57mW3Qz94Ua1AWjU5aWwCrXXCBG-Y,709
39
38
  parsl/configs/ec2.py,sha256=-vzlv3YpFfX7kpCYWHJFvdDqFZfj0leR6sEaus3Ydoo,868
@@ -61,13 +60,13 @@ parsl/data_provider/http.py,sha256=nDHTW7XmJqAukWJjPRQjyhUXt8r6GsQ36mX9mv_wOig,2
61
60
  parsl/data_provider/rsync.py,sha256=2-ZxqrT-hBj39x082NusJaBqsGW4Jd2qCW6JkVPpEl0,4254
62
61
  parsl/data_provider/staging.py,sha256=l-mAXFburs3BWPjkSmiQKuAgJpsxCG62yATPDbrafYI,4523
63
62
  parsl/dataflow/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
64
- parsl/dataflow/dflow.py,sha256=thxwgWI5F2twW4P_bsy1-ZERAfJIbqb1uI7uGGbhmRU,63873
63
+ parsl/dataflow/dflow.py,sha256=1xvZKXDleb1GMS7x4dg8BGhKJfD0wPq4bjbAtFbkkc4,64256
65
64
  parsl/dataflow/errors.py,sha256=w2vOt_ymzG2dOqJUO4IDcmTlrCIHlMZL8nBVyVq0O_8,2176
66
65
  parsl/dataflow/futures.py,sha256=aVfEUTzp4-EdunDAtNcqVQf8l_A7ArDi2c82KZMwxfY,5256
67
66
  parsl/dataflow/memoization.py,sha256=AsJO6c6cRp2ac6H8uGn2USlEi78_nX3QWvpxYt4XdYE,9583
68
67
  parsl/dataflow/rundirs.py,sha256=XKmBZpBEIsGACBhYOkbbs2e5edC0pQegJcSlk4FWeag,1154
69
68
  parsl/dataflow/states.py,sha256=hV6mfv-y4A6xrujeQglcomnfEs7y3Xm2g6JFwC6dvgQ,2612
70
- parsl/dataflow/taskrecord.py,sha256=QlsOUacZZq-sU25P-VmA0xDVUktRFEVRmJoWv3Oyzz0,3105
69
+ parsl/dataflow/taskrecord.py,sha256=bzIBmlDTsRrELtB9PUQwxTWcwrCd8aMsUAzvijle1eo,3114
71
70
  parsl/executors/__init__.py,sha256=J50N97Nm9YRjz6K0oNXDxUYIsDjL43_tp3LVb2w7n-M,381
72
71
  parsl/executors/base.py,sha256=DyKzXZztPagh9xQykTUuJRMR9g3i6qkbZi8YpWrIfXM,4340
73
72
  parsl/executors/errors.py,sha256=xVswxgi7vmJcUMCeYDAPK8sQT2kHFFROVoOr0dnmcWE,2098
@@ -79,14 +78,14 @@ parsl/executors/flux/executor.py,sha256=0omXRPvykdW5VZb8mwgBJjxVk4H6G8xoL5D_R9pu
79
78
  parsl/executors/flux/flux_instance_manager.py,sha256=tTEOATClm9SwdgLeBRWPC6D55iNDuh0YxqJOw3c3eQ4,2036
80
79
  parsl/executors/high_throughput/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
81
80
  parsl/executors/high_throughput/errors.py,sha256=vl69wLuVOplbKxHI9WphEGBExHWkTn5n8T9QhBXuNH0,380
82
- parsl/executors/high_throughput/executor.py,sha256=aHA0w80DcSKUrJ0blAgbqRAcjLAg6cJUalDyVEOYa8o,36464
83
- parsl/executors/high_throughput/interchange.py,sha256=9wx06FmbOwBTmZsFeBMt5pLWYySsBBBi3kwUfoeW7iQ,30200
84
- parsl/executors/high_throughput/manager_record.py,sha256=T8-JVMfDJU6SJfzJRooD0mO8AHGMXlcn3PBOM0m_vng,366
81
+ parsl/executors/high_throughput/executor.py,sha256=mSxDizbw79zmnW4yMDuRflZfGwZKciWmZ8XW9rAy4gI,37591
82
+ parsl/executors/high_throughput/interchange.py,sha256=Rt6HyFvQYFuqUJ1ytXmUFTDIK9wOBm4l96IHoL6OFRc,31491
83
+ parsl/executors/high_throughput/manager_record.py,sha256=w5EwzVqPtsLOyOW8jP44U3uaogt8H--tkwp7FNyKN_o,385
85
84
  parsl/executors/high_throughput/monitoring_info.py,sha256=3gQpwQjjNDEBz0cQqJZB6hRiwLiWwXs83zkQDmbOwxY,297
86
85
  parsl/executors/high_throughput/mpi_prefix_composer.py,sha256=GPSejuNL407gvzw9f7dTWArTLn6heTi-erJjgcM-_8Y,4273
87
86
  parsl/executors/high_throughput/mpi_resource_management.py,sha256=geLYmp2teKYgTnzATAR_JPtjAa0ysu6pHpXs90vwkds,7975
88
87
  parsl/executors/high_throughput/probe.py,sha256=lvnuf-vBv57tHvFh-J51F9sDYBES7jCgs6KYgWvmKRs,2749
89
- parsl/executors/high_throughput/process_worker_pool.py,sha256=Xe6QlpYLrOsjxE5nXErxj8OvqBVgIEUy21m9a3tBxEc,39108
88
+ parsl/executors/high_throughput/process_worker_pool.py,sha256=hUKno44b3hzPQHKnF91K_BQxusDoapT8K8y-2E0DlDo,41109
90
89
  parsl/executors/high_throughput/zmq_pipes.py,sha256=TEIr1PcBDVbchBukzPaEsku2lbIIFCYYjeUq5zw_VBA,6514
91
90
  parsl/executors/radical/__init__.py,sha256=CKbtV2numw5QvgIBq1htMUrt9TqDCIC2zifyf2svTNU,186
92
91
  parsl/executors/radical/executor.py,sha256=5r9WZkOr0clg79zm35E7nC7zNv0DpbyM8iTC2B6d4N0,21024
@@ -96,11 +95,11 @@ parsl/executors/radical/rpex_worker.py,sha256=1M1df-hzFdmZMWbRZlUzIX7uAWMKJ_SkxL
96
95
  parsl/executors/taskvine/__init__.py,sha256=sWIJdvSLgQKul9dlSjIkNat7yBDgU3SrBF3X2yhT86E,293
97
96
  parsl/executors/taskvine/errors.py,sha256=MNS_NjpvHjwevQXOjqjSEBFroqEWi-LT1ZEVZ2C5Dx0,652
98
97
  parsl/executors/taskvine/exec_parsl_function.py,sha256=oUAKbPWwpbzWwQ47bZQlVDxS8txhnhPsonMf3AOEMGQ,7085
99
- parsl/executors/taskvine/executor.py,sha256=07BJsXPKRwT6hYbQRf84C1k6m3woqq4SM8ZIa9KTUiA,31404
98
+ parsl/executors/taskvine/executor.py,sha256=KHiRGcLWHyVBm_6E4IowCV20Z15lsf2ZUnTR49IQxNg,31544
100
99
  parsl/executors/taskvine/factory.py,sha256=sHhfGv7xRFrWkQclzRXuFEAHuSXhsZu2lR5LJ81aucA,2638
101
100
  parsl/executors/taskvine/factory_config.py,sha256=AbE2fN2snrF5ITYrrS4DnGn2XkJHUFr_17DYHDHIwq0,3693
102
- parsl/executors/taskvine/manager.py,sha256=X4Fir46doc4qMdTSKNfyS78HvhnUqq7Rw7jCvbD0Tfw,25732
103
- parsl/executors/taskvine/manager_config.py,sha256=Kg1CknT88jTW0jEpFv5oKq1CeGeIJo5P1muayROcwzQ,7431
101
+ parsl/executors/taskvine/manager.py,sha256=VxVN2L5zFVPNfSAJrGgq87MRJKpcxf-BHdO5QWxB4TU,25822
102
+ parsl/executors/taskvine/manager_config.py,sha256=LzHc-bXqxixPlxMG5TdxxZ5E46D_hnn1tiPqLRPvUHY,7457
104
103
  parsl/executors/taskvine/utils.py,sha256=iSrIogeiauL3UNy_9tiZp1cBSNn6fIJkMYQRVi1n_r8,4156
105
104
  parsl/executors/workqueue/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
106
105
  parsl/executors/workqueue/errors.py,sha256=ghB93Ptb_QbOAvgLe7siV_snRRkU_T-cFHv3AR6Ziwo,541
@@ -111,32 +110,32 @@ parsl/executors/workqueue/parsl_coprocess_stub.py,sha256=_bJmpPIgL42qM6bVzeEKt1M
111
110
  parsl/jobs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
112
111
  parsl/jobs/error_handlers.py,sha256=dvfZFqTwAcFXrIx3sjFTcjtwOB0-xGn6QnPwJEG-kAI,2311
113
112
  parsl/jobs/errors.py,sha256=cpSQXCrlKtuHsQf7usjF-lX8XsDkFnE5kWpmFjiN6OU,178
114
- parsl/jobs/job_status_poller.py,sha256=MUwxrVtAGDAaurMw_eksWcoGXloABlAOavgPHmWGscI,5285
113
+ parsl/jobs/job_status_poller.py,sha256=30W-KvzYGQfblFwe_6ZpRVvzerwZD76IC4Xvt9FBw1c,5349
115
114
  parsl/jobs/states.py,sha256=rPBoAEEudKngWFijlwvXXhAagDs_9DCXvQP9rwzVgCM,4855
116
- parsl/jobs/strategy.py,sha256=oxw_X7EzO1fanmxj3quH7AINcuQWw1gfeHkOoKO36lI,12926
115
+ parsl/jobs/strategy.py,sha256=a-W3vxEHHCfe521LMfSoZLpJjdTtwCfTgdn1ChxzUuI,12959
117
116
  parsl/launchers/__init__.py,sha256=k8zAB3IBP-brfqXUptKwGkvsIRaXjAJZNBJa2XVtY1A,546
118
117
  parsl/launchers/base.py,sha256=CblcvPTJiu-MNLWaRtFe29SZQ0BpTOlaY8CGcHdlHIE,538
119
118
  parsl/launchers/errors.py,sha256=v5i460H_rovzukSccQetxQBVtd92jLQz-NbuDe2TdGI,467
120
- parsl/launchers/launchers.py,sha256=t9nuX38GMlAUPHs0aksnMd_5jI59IcqwlUD667w1cu4,15358
119
+ parsl/launchers/launchers.py,sha256=VB--fiVv_IQne3DydTMSdGUY0o0g69puAs-Hd3mJ2vo,15464
121
120
  parsl/monitoring/__init__.py,sha256=0ywNz6i0lM1xo_7_BIxhETDGeVd2C_0wwD7qgeaMR4c,83
122
- parsl/monitoring/db_manager.py,sha256=impNMJ92oACMCxXS0qBizRviN7-29Kjvs5m8p3Em1ZQ,36308
121
+ parsl/monitoring/db_manager.py,sha256=hdmmXSTXp8Wwhr7vLpQalD_ahRl3SNxKYVsplnThRk8,37021
123
122
  parsl/monitoring/message_type.py,sha256=Khn88afNxcOIciKiCK4GLnn90I5BlRTiOL3zK-P07yQ,401
124
- parsl/monitoring/monitoring.py,sha256=RlfbdH6kre3CXWi0kppUKjEVQrp1DQQxMfvZCwq7Vus,24855
123
+ parsl/monitoring/monitoring.py,sha256=N_g3ijGJK46y0k2CEWMGvGR4Ym1mR13yeBkW6TiHHMo,23488
125
124
  parsl/monitoring/radios.py,sha256=T2_6QuUjC-dd_7qMnIk6WHQead1iWz7m_P6ZC4QAqdA,5265
126
- parsl/monitoring/remote.py,sha256=88KYckdqCcGYWNxpkBETdNg4YVP8UkMLNcJDT4ffq_s,12552
125
+ parsl/monitoring/remote.py,sha256=OcIgudujtPO_DsY-YV36x92skeiNdGt-6aEOqaCU8T0,13900
127
126
  parsl/monitoring/types.py,sha256=SO6Fjjbb83sv_MtbutoxGssiWh6oXKkEEsD4EvwOnZ4,629
128
127
  parsl/monitoring/queries/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
129
128
  parsl/monitoring/queries/pandas.py,sha256=J09lIxSvVtAfBTbFcwKgUkHwZfaS6vYOzXHxS7UBLoc,2233
130
129
  parsl/monitoring/visualization/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
131
130
  parsl/monitoring/visualization/app.py,sha256=_RZNBHWJYKwadusPE5p0uFMTqKqI3gI2fBzC8SpspsY,1423
132
- parsl/monitoring/visualization/models.py,sha256=rwFsVrTKaszHDg4LpN7xfZF4XmetXgKyFg6UN-Qo9Bg,4778
131
+ parsl/monitoring/visualization/models.py,sha256=-pzynw6PCh-7_Kat4cqDFt9wAKbo9lWjF4O2muBqDDc,5139
133
132
  parsl/monitoring/visualization/utils.py,sha256=IIKnDdHSkvk6e8q-1O9cE-DclPMdrhXbum04EDDYI-0,314
134
133
  parsl/monitoring/visualization/version.py,sha256=mjxUkRW-XaF1dhu2IEUPPviGpfOvbxhWfTOYl250lVs,134
135
- parsl/monitoring/visualization/views.py,sha256=fsuVVGl1spq7eCulqRRXPj2mqzC6vlvD8yW31XTbCK0,8172
134
+ parsl/monitoring/visualization/views.py,sha256=o6mfKSPv85kSPb6fgLG5v3OEKGj3efpngE3UoiyTkDY,8256
136
135
  parsl/monitoring/visualization/plots/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
137
136
  parsl/monitoring/visualization/plots/default/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
138
137
  parsl/monitoring/visualization/plots/default/task_plots.py,sha256=j-0PZ5MsK3CU83kQVWDIuGHGFeXF5Z0se-wlRRd_z9s,1654
139
- parsl/monitoring/visualization/plots/default/workflow_plots.py,sha256=T5xRSBJz5urPGfFrFdAjMdGUVx2HYV8F17GTsuI17ME,11942
138
+ parsl/monitoring/visualization/plots/default/workflow_plots.py,sha256=zd2k6O4YMKGe69c56EtGKgGalAKYxbbGpoxIE0iB_yE,11985
140
139
  parsl/monitoring/visualization/plots/default/workflow_resource_plots.py,sha256=Z7LK5atAWn-2zwRYmCks3OKbYX80UKXHOmoK6Mec1TI,10269
141
140
  parsl/monitoring/visualization/static/parsl-logo-white.png,sha256=LAua5kwDq0Ngt2D3yk9Vh2dBNSIsjj6cqiHKaP2Rn08,14199
142
141
  parsl/monitoring/visualization/static/parsl-monitor.css,sha256=9j2mW1IOXBcuaT6-i0feIftuQLMV6gpJ1mpFhxUE3VU,337
@@ -150,7 +149,7 @@ parsl/monitoring/visualization/templates/workflow.html,sha256=QCSHAPHK_2C3gNcZ3N
150
149
  parsl/monitoring/visualization/templates/workflows_summary.html,sha256=7brKKNsxcT4z-l10BKJlgTxQtGL033ZS5jEDdSmsPEE,891
151
150
  parsl/providers/__init__.py,sha256=jd-1_vd-HtWYDHzwO30lNW5GMw6nfeTyNn3tI8CG7L4,1207
152
151
  parsl/providers/base.py,sha256=LvSMClsbCQI_7geGdNDpKZ6vWCl1EpD73o0xkxilqJ4,5702
153
- parsl/providers/cluster_provider.py,sha256=FLl3AUHdFRRapQl_YoM1gxg_UhH3gxxaDvl6NNQqSTg,4701
152
+ parsl/providers/cluster_provider.py,sha256=7eM2i9bVkNRDhrggFbnlQBxzzC9wz_BmNNqxtFM8VJ4,4668
154
153
  parsl/providers/errors.py,sha256=7ig0DEqyFIwjVx1QVXfeutz1Ek16IEAS4doaqg-BTfQ,2270
155
154
  parsl/providers/ad_hoc/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
156
155
  parsl/providers/ad_hoc/ad_hoc.py,sha256=jeYMxMT_ox7banr8Db_UeT2qer6XTGLZOZvC307S54U,8302
@@ -183,7 +182,7 @@ parsl/providers/pbspro/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3
183
182
  parsl/providers/pbspro/pbspro.py,sha256=Uo6XvXZ3HwotfvrzFtaE1Wf4pta1LoqM4GgkQUTXv4A,8822
184
183
  parsl/providers/pbspro/template.py,sha256=y-Dher--t5Eury-c7cAuSZs9FEUXWiruFUI07v81558,315
185
184
  parsl/providers/slurm/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
186
- parsl/providers/slurm/slurm.py,sha256=ormNss2s8NVrrS-QZobuzrDlbEolDm6ZdyHD5vgrzsU,13720
185
+ parsl/providers/slurm/slurm.py,sha256=HnDZk2owmNz_r6Spwlu233HbQLo9dWePy3KD4CXXRRs,13916
187
186
  parsl/providers/slurm/template.py,sha256=KpgBEFMc1ps-38jdrk13xUGx9TCivu-iF90jgQDdiEQ,315
188
187
  parsl/providers/torque/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
189
188
  parsl/providers/torque/template.py,sha256=4qfc2gmlEhRCAD7erFDOs4prJQ43I8s4E8DSUSVQx3A,358
@@ -241,7 +240,7 @@ parsl/tests/configs/summit.py,sha256=_Dd8r5mod30QRCSp16BlzsQYSKbdM71Rt4azvz9Pzfk
241
240
  parsl/tests/configs/swan_htex.py,sha256=5mIYnzwOFEQ8fNsepP9QjFj9ZMW2m8u4pJluZ5BZGpw,1501
242
241
  parsl/tests/configs/taskvine_ex.py,sha256=e_sXe3d-uSL8cli19-xrBloqQcEQQ4tKVa_x_aDcYGM,632
243
242
  parsl/tests/configs/theta.py,sha256=d5fLCW7SpgKkH3K8iRzj6IhsDozlKr4qgDrQ6Dv1bYA,1298
244
- parsl/tests/configs/user_opts.py,sha256=8gDzQWuiKQMXq1BV6nDXpaC4dn5j0vtRNVwUyoQbUBM,6184
243
+ parsl/tests/configs/user_opts.py,sha256=fNO1OxISFPP7IyJ_iwf8dQ6EagVr2StXtOWmGnA9MeI,6265
245
244
  parsl/tests/configs/workqueue_ex.py,sha256=5gbjlGECkUd0p9PJbq-IBYARlEbEBiPpXWgHn1GC1d8,514
246
245
  parsl/tests/integration/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
247
246
  parsl/tests/integration/latency.py,sha256=kWYkXsbnVnpwS6rHsdm7a1FsUOJWHhuXDsRPlApw6iE,3289
@@ -341,6 +340,7 @@ parsl/tests/test_htex/test_basic.py,sha256=GIOF3cr6A87QDVMxeN0LrvJnXO2Nap0c-TH46
341
340
  parsl/tests/test_htex/test_connected_blocks.py,sha256=0628oJ_0_aVsda5xuFwG3_3q8ZiEAM-sfIOINkUHQrk,1639
342
341
  parsl/tests/test_htex/test_cpu_affinity_explicit.py,sha256=tv12ojw4DdymlVBjVNnrFX7_mhwix2jnBLkRbKOQRao,1422
343
342
  parsl/tests/test_htex/test_disconnected_blocks.py,sha256=HQhtX757t4CdWbtu-VT3MttLHQowGyHPOp9vX0TN_a4,1890
343
+ parsl/tests/test_htex/test_drain.py,sha256=bnbQfoEQi9EIlDJsDMp7adR45gsAScTNPoOZ2vc12HY,2260
344
344
  parsl/tests/test_htex/test_htex.py,sha256=4dXtcthZQvgEDtMc00g6Pw7FnqNWB_0j8fuJqHKO-IE,3896
345
345
  parsl/tests/test_htex/test_manager_failure.py,sha256=gemQopZoDEoZLOvep5JZkY6tQlZoko8Z0Kmpj1-Gbws,1161
346
346
  parsl/tests/test_htex/test_missing_worker.py,sha256=oiDN3ylsf-72jmX-Y5OWA2kQWpbVbvmoSLnu2vnyZeY,976
@@ -348,6 +348,7 @@ parsl/tests/test_htex/test_multiple_disconnected_blocks.py,sha256=L4vw_Mo-upp2p9
348
348
  parsl/tests/test_htex/test_worker_failure.py,sha256=Uz-RHI-LK78FMjXUvrUFmo4iYfmpDVBUcBxxRb3UG9M,603
349
349
  parsl/tests/test_htex/test_zmq_binding.py,sha256=MQWAL7XxaI1P2k_VUgm5DKD4GVEn5c2Y8MEyOSABRA4,2937
350
350
  parsl/tests/test_monitoring/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
351
+ parsl/tests/test_monitoring/test_app_names.py,sha256=4Ziggxv0JLP0UGAd5jjXdivUdZQLlMvVVMfiTStjxRk,2191
351
352
  parsl/tests/test_monitoring/test_basic.py,sha256=uXWx2O2Y2gfSO4e8zTjyj5bucKHG9OVzMxQNnq9abeY,2776
352
353
  parsl/tests/test_monitoring/test_db_locks.py,sha256=PGoRmvqA6AYPXTPHOZPLH38Z4D6EEgSb6ZgNfZtwIGk,2910
353
354
  parsl/tests/test_monitoring/test_fuzz_zmq.py,sha256=Xi08Drt_DZKbo3Ihl83cgsTTMRok1bBpyrVOQQWlbf4,3145
@@ -412,7 +413,7 @@ parsl/tests/test_scaling/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZ
412
413
  parsl/tests/test_scaling/test_block_error_handler.py,sha256=VFKs_jq7yd7bpdfYva3Sa_TBS8VcjGUS6YJ9Y34RbyI,6050
413
414
  parsl/tests/test_scaling/test_regression_1621.py,sha256=iRu3GFsg2l9J61AVZKWLc6zJcvI2JYD0WvtTYDSv22I,1770
414
415
  parsl/tests/test_scaling/test_scale_down.py,sha256=T8NVmoIebdpSjrNJCdgDHumpz9eKLkJrpeW7Kwi8cBg,2821
415
- parsl/tests/test_scaling/test_scale_down_htex_auto_scale.py,sha256=hwM2MAQTIT2wyvHdT0Tf4P7Kvm6eq8S3FqCNl_QOnF8,5030
416
+ parsl/tests/test_scaling/test_scale_down_htex_auto_scale.py,sha256=1vP2a8qygnxuUji7B3kJOUgwjmmIC1fDPhDdqzs5YFA,4597
416
417
  parsl/tests/test_serialization/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
417
418
  parsl/tests/test_serialization/test_2555_caching_deserializer.py,sha256=J8__b4djA5tErd8FUSXGkGcdXlW2KHbBWRbCTAnV08Q,767
418
419
  parsl/tests/test_serialization/test_basic.py,sha256=51KshqIk2RNr7S2iSkl5tZo40CJBb0h6uby8YPgOGlg,543
@@ -436,13 +437,13 @@ parsl/tests/test_threads/test_lazy_errors.py,sha256=nGhYfCMHFZYSy6YJ4gnAmiLl9SfY
436
437
  parsl/tests/test_utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
437
438
  parsl/tests/test_utils/test_representation_mixin.py,sha256=kUZeIDwA2rlbJ3-beGzLLwf3dOplTMCrWJN87etHcyY,1633
438
439
  parsl/usage_tracking/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
439
- parsl/usage_tracking/usage.py,sha256=WSfllOV4bDveCaHSG2i39-si1lNHAqi__iY_hbf5OPk,6817
440
- parsl-2024.3.4.data/scripts/exec_parsl_function.py,sha256=NtWNeBvRqksej38eRPw8zPBJ1CeW6vgaitve0tfz_qc,7801
441
- parsl-2024.3.4.data/scripts/parsl_coprocess.py,sha256=Y7Tc-h9WGui-YDe3w_h91w2Sm1JNL1gJ9kAV4PE_gw8,5722
442
- parsl-2024.3.4.data/scripts/process_worker_pool.py,sha256=ycbGMSMSWVq4hJCENzNvivyMUKC5b0bNl8mCdgcY1po,39094
443
- parsl-2024.3.4.dist-info/LICENSE,sha256=tAkwu8-AdEyGxGoSvJ2gVmQdcicWw3j1ZZueVV74M-E,11357
444
- parsl-2024.3.4.dist-info/METADATA,sha256=_lE8idHENNC5h4Tm9ix3Khy82v771dBvhjMqQspNVQs,3959
445
- parsl-2024.3.4.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
446
- parsl-2024.3.4.dist-info/entry_points.txt,sha256=XqnsWDYoEcLbsMcpnYGKLEnSBmaIe1YoM5YsBdJG2tI,176
447
- parsl-2024.3.4.dist-info/top_level.txt,sha256=PIheYoUFQtF2icLsgOykgU-Cjuwr2Oi6On2jo5RYgRM,6
448
- parsl-2024.3.4.dist-info/RECORD,,
440
+ parsl/usage_tracking/usage.py,sha256=pSADeogWqvkYI_n2pojv4IWDEFAQ3KwXNx6LDTohMHQ,6684
441
+ parsl-2024.3.18.data/scripts/exec_parsl_function.py,sha256=NtWNeBvRqksej38eRPw8zPBJ1CeW6vgaitve0tfz_qc,7801
442
+ parsl-2024.3.18.data/scripts/parsl_coprocess.py,sha256=Y7Tc-h9WGui-YDe3w_h91w2Sm1JNL1gJ9kAV4PE_gw8,5722
443
+ parsl-2024.3.18.data/scripts/process_worker_pool.py,sha256=iVrw160CpTAVuX9PH-ezU4ebm9C1_U6IMrkcdyTQJ58,41095
444
+ parsl-2024.3.18.dist-info/LICENSE,sha256=tAkwu8-AdEyGxGoSvJ2gVmQdcicWw3j1ZZueVV74M-E,11357
445
+ parsl-2024.3.18.dist-info/METADATA,sha256=HywLgkSikpur2yGd42LiMsFytWwnayht8sQasJ6n5j8,3960
446
+ parsl-2024.3.18.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
447
+ parsl-2024.3.18.dist-info/entry_points.txt,sha256=XqnsWDYoEcLbsMcpnYGKLEnSBmaIe1YoM5YsBdJG2tI,176
448
+ parsl-2024.3.18.dist-info/top_level.txt,sha256=PIheYoUFQtF2icLsgOykgU-Cjuwr2Oi6On2jo5RYgRM,6
449
+ parsl-2024.3.18.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: bdist_wheel (0.42.0)
2
+ Generator: bdist_wheel (0.43.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
@@ -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
- )