parsl 2025.6.23__py3-none-any.whl → 2025.6.30__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 (44) hide show
  1. parsl/configs/osg.py +1 -1
  2. parsl/dataflow/dflow.py +14 -4
  3. parsl/executors/base.py +14 -6
  4. parsl/executors/high_throughput/executor.py +20 -15
  5. parsl/executors/high_throughput/interchange.py +173 -191
  6. parsl/executors/high_throughput/mpi_executor.py +7 -4
  7. parsl/executors/high_throughput/probe.py +4 -4
  8. parsl/executors/high_throughput/process_worker_pool.py +88 -94
  9. parsl/executors/taskvine/executor.py +9 -3
  10. parsl/executors/taskvine/manager.py +3 -1
  11. parsl/executors/threads.py +8 -1
  12. parsl/executors/workqueue/executor.py +9 -3
  13. parsl/monitoring/errors.py +5 -0
  14. parsl/monitoring/monitoring.py +25 -42
  15. parsl/monitoring/radios/base.py +63 -2
  16. parsl/monitoring/radios/filesystem.py +18 -3
  17. parsl/monitoring/radios/filesystem_router.py +13 -26
  18. parsl/monitoring/radios/htex.py +22 -13
  19. parsl/monitoring/radios/multiprocessing.py +22 -2
  20. parsl/monitoring/radios/udp.py +57 -19
  21. parsl/monitoring/radios/udp_router.py +49 -15
  22. parsl/monitoring/remote.py +19 -40
  23. parsl/providers/local/local.py +12 -13
  24. parsl/tests/configs/htex_local_alternate.py +0 -1
  25. parsl/tests/test_htex/test_interchange_exit_bad_registration.py +5 -7
  26. parsl/tests/test_htex/test_zmq_binding.py +5 -6
  27. parsl/tests/test_monitoring/test_basic.py +12 -10
  28. parsl/tests/test_monitoring/test_htex_init_blocks_vs_monitoring.py +0 -1
  29. parsl/tests/test_monitoring/test_radio_filesystem.py +7 -9
  30. parsl/tests/test_monitoring/test_radio_multiprocessing.py +44 -0
  31. parsl/tests/test_monitoring/test_radio_udp.py +163 -12
  32. parsl/tests/test_monitoring/test_stdouterr.py +1 -3
  33. parsl/tests/test_scaling/test_worker_interchange_bad_messages_3262.py +3 -7
  34. parsl/version.py +1 -1
  35. {parsl-2025.6.23.data → parsl-2025.6.30.data}/scripts/interchange.py +173 -191
  36. {parsl-2025.6.23.data → parsl-2025.6.30.data}/scripts/process_worker_pool.py +88 -94
  37. {parsl-2025.6.23.dist-info → parsl-2025.6.30.dist-info}/METADATA +2 -2
  38. {parsl-2025.6.23.dist-info → parsl-2025.6.30.dist-info}/RECORD +44 -43
  39. {parsl-2025.6.23.data → parsl-2025.6.30.data}/scripts/exec_parsl_function.py +0 -0
  40. {parsl-2025.6.23.data → parsl-2025.6.30.data}/scripts/parsl_coprocess.py +0 -0
  41. {parsl-2025.6.23.dist-info → parsl-2025.6.30.dist-info}/LICENSE +0 -0
  42. {parsl-2025.6.23.dist-info → parsl-2025.6.30.dist-info}/WHEEL +0 -0
  43. {parsl-2025.6.23.dist-info → parsl-2025.6.30.dist-info}/entry_points.txt +0 -0
  44. {parsl-2025.6.23.dist-info → parsl-2025.6.30.dist-info}/top_level.txt +0 -0
@@ -1,7 +1,6 @@
1
1
  #!python
2
2
 
3
3
  import argparse
4
- import json
5
4
  import logging
6
5
  import math
7
6
  import multiprocessing
@@ -66,8 +65,7 @@ class Manager:
66
65
  def __init__(self, *,
67
66
  addresses,
68
67
  address_probe_timeout,
69
- task_port,
70
- result_port,
68
+ port,
71
69
  cores_per_worker,
72
70
  mem_per_worker,
73
71
  max_workers_per_node,
@@ -157,15 +155,13 @@ class Manager:
157
155
  self._start_time = time.time()
158
156
 
159
157
  try:
160
- ix_address = probe_addresses(addresses.split(','), task_port, timeout=address_probe_timeout)
158
+ ix_address = probe_addresses(addresses.split(','), port, timeout=address_probe_timeout)
161
159
  if not ix_address:
162
160
  raise Exception("No viable address found")
163
161
  else:
164
- logger.info("Connection to Interchange successful on {}".format(ix_address))
165
- task_q_url = tcp_url(ix_address, task_port)
166
- result_q_url = tcp_url(ix_address, result_port)
167
- logger.info("Task url : {}".format(task_q_url))
168
- logger.info("Result url : {}".format(result_q_url))
162
+ logger.info(f"Connection to Interchange successful on {ix_address}")
163
+ ix_url = tcp_url(ix_address, port)
164
+ logger.info(f"Interchange url: {ix_url}")
169
165
  except Exception:
170
166
  logger.exception("Caught exception while trying to determine viable address to interchange")
171
167
  print("Failed to find a viable address to connect to interchange. Exiting")
@@ -174,8 +170,7 @@ class Manager:
174
170
  self.cert_dir = cert_dir
175
171
  self.zmq_context = curvezmq.ClientContext(self.cert_dir)
176
172
 
177
- self._task_q_url = task_q_url
178
- self._result_q_url = result_q_url
173
+ self._ix_url = ix_url
179
174
 
180
175
  self.uid = uid
181
176
  self.block_id = block_id
@@ -250,37 +245,37 @@ class Manager:
250
245
  self.worker_count = min(len(self.available_accelerators), self.worker_count)
251
246
  logger.info("Manager will spawn {} workers".format(self.worker_count))
252
247
 
253
- def create_reg_message(self):
248
+ def create_reg_message(self) -> dict:
254
249
  """ Creates a registration message to identify the worker to the interchange
255
250
  """
256
- msg = {'type': 'registration',
257
- 'parsl_v': PARSL_VERSION,
258
- 'python_v': "{}.{}.{}".format(sys.version_info.major,
259
- sys.version_info.minor,
260
- sys.version_info.micro),
261
- 'packages': {dist.metadata['Name']: dist.version for dist in distributions()},
262
- 'worker_count': self.worker_count,
263
- 'uid': self.uid,
264
- 'block_id': self.block_id,
265
- 'start_time': self.start_time,
266
- 'prefetch_capacity': self.prefetch_capacity,
267
- 'max_capacity': self.worker_count + self.prefetch_capacity,
268
- 'os': platform.system(),
269
- 'hostname': platform.node(),
270
- 'dir': os.getcwd(),
271
- 'cpu_count': psutil.cpu_count(logical=False),
272
- 'total_memory': psutil.virtual_memory().total,
273
- }
274
- b_msg = json.dumps(msg).encode('utf-8')
275
- return b_msg
251
+ return {
252
+ 'type': 'registration',
253
+ 'parsl_v': PARSL_VERSION,
254
+ 'python_v': "{}.{}.{}".format(
255
+ sys.version_info.major,
256
+ sys.version_info.minor,
257
+ sys.version_info.micro
258
+ ),
259
+ 'packages': {d.metadata['Name']: d.version for d in distributions()},
260
+ 'worker_count': self.worker_count,
261
+ 'uid': self.uid,
262
+ 'block_id': self.block_id,
263
+ 'start_time': self.start_time,
264
+ 'prefetch_capacity': self.prefetch_capacity,
265
+ 'max_capacity': self.worker_count + self.prefetch_capacity,
266
+ 'os': platform.system(),
267
+ 'hostname': platform.node(),
268
+ 'dir': os.getcwd(),
269
+ 'cpu_count': psutil.cpu_count(logical=False),
270
+ 'total_memory': psutil.virtual_memory().total,
271
+ }
276
272
 
277
273
  @staticmethod
278
274
  def heartbeat_to_incoming(task_incoming: zmq.Socket) -> None:
279
275
  """ Send heartbeat to the incoming task queue
280
276
  """
281
- msg = {'type': 'heartbeat'}
282
277
  # don't need to dumps and encode this every time - could do as a global on import?
283
- b_msg = json.dumps(msg).encode('utf-8')
278
+ b_msg = pickle.dumps({'type': 'heartbeat'})
284
279
  task_incoming.send(b_msg)
285
280
  logger.debug("Sent heartbeat")
286
281
 
@@ -289,32 +284,38 @@ class Manager:
289
284
  """ Send heartbeat to the incoming task queue
290
285
  """
291
286
  msg = {'type': 'drain'}
292
- b_msg = json.dumps(msg).encode('utf-8')
287
+ b_msg = pickle.dumps(msg)
293
288
  task_incoming.send(b_msg)
294
289
  logger.debug("Sent drain")
295
290
 
296
291
  @wrap_with_logs
297
- def pull_tasks(self):
292
+ def interchange_communicator(self, pair_setup: threading.Event):
298
293
  """ Pull tasks from the incoming tasks zmq pipe onto the internal
299
294
  pending task queue
300
295
  """
301
296
  logger.info("starting")
302
297
 
298
+ results_sock = self.zmq_context.socket(zmq.PAIR)
299
+ results_sock.setsockopt(zmq.LINGER, 0)
300
+ results_sock.bind("inproc://results")
301
+ pair_setup.set()
302
+
303
303
  # Linger is set to 0, so that the manager can exit even when there might be
304
304
  # messages in the pipe
305
- task_incoming = self.zmq_context.socket(zmq.DEALER)
306
- task_incoming.setsockopt(zmq.IDENTITY, self.uid.encode('utf-8'))
307
- task_incoming.setsockopt(zmq.LINGER, 0)
308
- task_incoming.connect(self._task_q_url)
305
+ ix_sock = self.zmq_context.socket(zmq.DEALER)
306
+ ix_sock.setsockopt(zmq.IDENTITY, self.uid.encode('utf-8'))
307
+ ix_sock.setsockopt(zmq.LINGER, 0)
308
+ ix_sock.connect(self._ix_url)
309
309
  logger.info("Manager task pipe connected to interchange")
310
310
 
311
311
  poller = zmq.Poller()
312
- poller.register(task_incoming, zmq.POLLIN)
312
+ poller.register(results_sock, zmq.POLLIN)
313
+ poller.register(ix_sock, zmq.POLLIN)
313
314
 
314
315
  # Send a registration message
315
316
  msg = self.create_reg_message()
316
- logger.debug("Sending registration message: {}".format(msg))
317
- task_incoming.send(msg)
317
+ logger.debug("Sending registration message: %s", msg)
318
+ ix_sock.send(pickle.dumps(msg))
318
319
  last_beat = time.time()
319
320
  last_interchange_contact = time.time()
320
321
  task_recv_counter = 0
@@ -335,18 +336,21 @@ class Manager:
335
336
  pending_task_count = self.pending_task_queue.qsize()
336
337
  except NotImplementedError:
337
338
  # Ref: https://github.com/python/cpython/blob/6d5e0dc0e330f4009e8dc3d1642e46b129788877/Lib/multiprocessing/queues.py#L125
338
- pending_task_count = f"pending task count is not available on {platform.system()}"
339
+ pending_task_count = f"pending task count is not available on {platform.system()}" # type: ignore[assignment]
339
340
 
340
- logger.debug("ready workers: {}, pending tasks: {}".format(self.ready_worker_count.value,
341
- pending_task_count))
341
+ logger.debug(
342
+ 'ready workers: %d, pending tasks: %d',
343
+ self.ready_worker_count.value, # type: ignore[attr-defined]
344
+ pending_task_count,
345
+ )
342
346
 
343
347
  if time.time() >= last_beat + self.heartbeat_period:
344
- self.heartbeat_to_incoming(task_incoming)
348
+ self.heartbeat_to_incoming(ix_sock)
345
349
  last_beat = time.time()
346
350
 
347
351
  if time.time() > self.drain_time:
348
352
  logger.info("Requesting drain")
349
- self.drain_to_incoming(task_incoming)
353
+ self.drain_to_incoming(ix_sock)
350
354
  # This will start the pool draining...
351
355
  # Drained exit behaviour does not happen here. It will be
352
356
  # driven by the interchange sending a DRAINED_CODE message.
@@ -358,8 +362,8 @@ class Manager:
358
362
  poll_duration_s = max(0, next_interesting_event_time - time.time())
359
363
  socks = dict(poller.poll(timeout=poll_duration_s * 1000))
360
364
 
361
- if socks.get(task_incoming) == zmq.POLLIN:
362
- _, pkl_msg = task_incoming.recv_multipart()
365
+ if socks.get(ix_sock) == zmq.POLLIN:
366
+ pkl_msg = ix_sock.recv()
363
367
  tasks = pickle.loads(pkl_msg)
364
368
  last_interchange_contact = time.time()
365
369
 
@@ -377,6 +381,11 @@ class Manager:
377
381
  for task in tasks:
378
382
  self.task_scheduler.put_task(task)
379
383
 
384
+ elif socks.get(results_sock) == zmq.POLLIN:
385
+ meta_b = pickle.dumps({'type': 'result'})
386
+ ix_sock.send_multipart([meta_b, results_sock.recv()])
387
+ logger.debug("Result sent to interchange")
388
+
380
389
  else:
381
390
  logger.debug("No incoming tasks")
382
391
 
@@ -387,45 +396,36 @@ class Manager:
387
396
  logger.critical("Exiting")
388
397
  break
389
398
 
390
- task_incoming.close()
399
+ ix_sock.close()
391
400
  logger.info("Exiting")
392
401
 
393
402
  @wrap_with_logs
394
- def push_results(self):
395
- """ Listens on the pending_result_queue and sends out results via zmq
403
+ def ferry_result(self, may_connect: threading.Event):
404
+ """ Listens on the pending_result_queue and ferries results to the interchange
405
+ connected thread
396
406
  """
397
- logger.debug("Starting result push thread")
407
+ logger.debug("Begin")
398
408
 
399
409
  # Linger is set to 0, so that the manager can exit even when there might be
400
410
  # messages in the pipe
401
- result_outgoing = self.zmq_context.socket(zmq.DEALER)
402
- result_outgoing.setsockopt(zmq.IDENTITY, self.uid.encode('utf-8'))
403
- result_outgoing.setsockopt(zmq.LINGER, 0)
404
- result_outgoing.connect(self._result_q_url)
405
- logger.info("Manager result pipe connected to interchange")
411
+ notify_sock = self.zmq_context.socket(zmq.PAIR)
412
+ notify_sock.setsockopt(zmq.LINGER, 0)
413
+ may_connect.wait()
414
+ notify_sock.connect("inproc://results")
406
415
 
407
416
  while not self._stop_event.is_set():
408
- logger.debug("Starting pending_result_queue get")
409
417
  try:
410
418
  r = self.task_scheduler.get_result()
411
419
  if r is None:
412
420
  continue
413
- logger.debug("Result received from worker: %s", id(r))
414
- result_outgoing.send(r)
415
- logger.debug("Result sent to interchange: %s", id(r))
421
+ logger.debug("Result received from worker")
422
+ notify_sock.send(r)
416
423
  except Exception:
417
424
  logger.exception("Failed to send result to interchange")
418
425
 
419
- result_outgoing.close()
426
+ notify_sock.close()
420
427
  logger.debug("Exiting")
421
428
 
422
- @wrap_with_logs
423
- def heartbeater(self):
424
- while not self._stop_event.wait(self.heartbeat_period):
425
- heartbeat_message = f"heartbeat_period={self.heartbeat_period} seconds"
426
- logger.info(f"Sending heartbeat via results connection: {heartbeat_message}")
427
- self.pending_result_queue.put(pickle.dumps({'type': 'heartbeat'}))
428
-
429
429
  def worker_watchdog(self, procs: dict[int, SpawnProcess]):
430
430
  """Keeps workers alive."""
431
431
  logger.debug("Starting worker watchdog")
@@ -492,23 +492,26 @@ class Manager:
492
492
 
493
493
  logger.debug("Workers started")
494
494
 
495
- thr_task_puller = threading.Thread(target=self.pull_tasks, name="Task-Puller")
496
- thr_result_pusher = threading.Thread(
497
- target=self.push_results, name="Result-Pusher"
495
+ pair_setup = threading.Event()
496
+
497
+ thr_task_puller = threading.Thread(
498
+ target=self.interchange_communicator,
499
+ args=(pair_setup,),
500
+ name="Interchange-Communicator",
498
501
  )
502
+ thr_result_ferry = threading.Thread(
503
+ target=self.ferry_result, args=(pair_setup,), name="Result-Shovel")
499
504
  thr_worker_watchdog = threading.Thread(
500
505
  target=self.worker_watchdog, args=(procs,), name="worker-watchdog"
501
506
  )
502
507
  thr_monitoring_handler = threading.Thread(
503
508
  target=self.handle_monitoring_messages, name="Monitoring-Handler"
504
509
  )
505
- thr_heartbeater = threading.Thread(target=self.heartbeater, name="Heartbeater")
506
510
 
507
511
  thr_task_puller.start()
508
- thr_result_pusher.start()
512
+ thr_result_ferry.start()
509
513
  thr_worker_watchdog.start()
510
514
  thr_monitoring_handler.start()
511
- thr_heartbeater.start()
512
515
 
513
516
  logger.info("Manager threads started")
514
517
 
@@ -520,11 +523,10 @@ class Manager:
520
523
  self.monitoring_queue.put(None)
521
524
  self.pending_result_queue.put(None)
522
525
 
523
- thr_heartbeater.join()
524
- thr_task_puller.join()
525
- thr_result_pusher.join()
526
- thr_worker_watchdog.join()
527
526
  thr_monitoring_handler.join()
527
+ thr_worker_watchdog.join()
528
+ thr_result_ferry.join()
529
+ thr_task_puller.join()
528
530
 
529
531
  for worker_id in procs:
530
532
  p = procs[worker_id]
@@ -862,10 +864,10 @@ def get_arg_parser() -> argparse.ArgumentParser:
862
864
  help="GB of memory assigned to each worker process. Default=0, no assignment",
863
865
  )
864
866
  parser.add_argument(
865
- "-t",
866
- "--task_port",
867
+ "-P",
868
+ "--port",
867
869
  required=True,
868
- help="Task port for receiving tasks from the interchange",
870
+ help="Port for communication with the interchange",
869
871
  )
870
872
  parser.add_argument(
871
873
  "--max_workers_per_node",
@@ -901,12 +903,6 @@ def get_arg_parser() -> argparse.ArgumentParser:
901
903
  parser.add_argument(
902
904
  "--poll", default=10, help="Poll period used in milliseconds"
903
905
  )
904
- parser.add_argument(
905
- "-r",
906
- "--result_port",
907
- required=True,
908
- help="Result port for posting results to the interchange",
909
- )
910
906
  parser.add_argument(
911
907
  "--cpu-affinity",
912
908
  type=strategyorlist,
@@ -953,8 +949,7 @@ if __name__ == "__main__":
953
949
  f"\n Block ID: {args.block_id}"
954
950
  f"\n cores_per_worker: {args.cores_per_worker}"
955
951
  f"\n mem_per_worker: {args.mem_per_worker}"
956
- f"\n task_port: {args.task_port}"
957
- f"\n result_port: {args.result_port}"
952
+ f"\n Interchange port: {args.port}"
958
953
  f"\n addresses: {args.addresses}"
959
954
  f"\n max_workers_per_node: {args.max_workers_per_node}"
960
955
  f"\n poll_period: {args.poll}"
@@ -969,8 +964,7 @@ if __name__ == "__main__":
969
964
  f"\n mpi_launcher: {args.mpi_launcher}"
970
965
  )
971
966
  try:
972
- manager = Manager(task_port=args.task_port,
973
- result_port=args.result_port,
967
+ manager = Manager(port=args.port,
974
968
  addresses=args.addresses,
975
969
  address_probe_timeout=int(args.address_probe_timeout),
976
970
  uid=args.uid,
@@ -1,9 +1,9 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: parsl
3
- Version: 2025.6.23
3
+ Version: 2025.6.30
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/2025.06.23.tar.gz
6
+ Download-URL: https://github.com/Parsl/parsl/archive/2025.06.30.tar.gz
7
7
  Author: The Parsl Team
8
8
  Author-email: parsl@googlegroups.com
9
9
  License: Apache 2.0
@@ -8,7 +8,7 @@ parsl/multiprocessing.py,sha256=JNAfgdZvQSsxVyUp229OOUqWwf_ZUhpmw8X9CdF3i6k,3614
8
8
  parsl/process_loggers.py,sha256=uQ7Gd0W72Jz7rrcYlOMfLsAEhkRltxXJL2MgdduJjEw,1136
9
9
  parsl/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
10
10
  parsl/utils.py,sha256=codTX6_KLhgeTwNkRzc1lo4bgc1M93eJ-lkqOO98fvk,14331
11
- parsl/version.py,sha256=Ic4ZXjmRNaNVe4VgUeJZzbs04AL3PcIpDFnIlIUjmIQ,131
11
+ parsl/version.py,sha256=HdVM1vluXKc-wEPUuamQMV8xOj_mmygRd2jXw-VuvG4,131
12
12
  parsl/app/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
13
13
  parsl/app/app.py,sha256=0gbM4AH2OtFOLsv07I5nglpElcwMSOi-FzdZZfrk7So,8532
14
14
  parsl/app/bash.py,sha256=jm2AvePlCT9DZR7H_4ANDWxatp5dN_22FUlT_gWhZ-g,5528
@@ -34,7 +34,7 @@ parsl/configs/improv.py,sha256=le9fDip-Mr-HqKObiyHXbdR-Ne7cy15Ao5ONoUzCSaE,1252
34
34
  parsl/configs/kubernetes.py,sha256=s6ABVRwHEKsIFi-w9gc5OK-P0UDmlAZsoHc6OZ3oOD4,1325
35
35
  parsl/configs/local_threads.py,sha256=I1VFfGo2TMTrBL9g_rlG3TEqEWkhL-AHpkqJ3lvcTf8,221
36
36
  parsl/configs/midway.py,sha256=An2Z-TbL3b6AP3uQwauxtUqZaYO2CtUiP8XH05hpWks,1221
37
- parsl/configs/osg.py,sha256=OVpR2Q33EL6OYGRyj-VpfpbGDhRwGAu3_rT388n1UaY,1220
37
+ parsl/configs/osg.py,sha256=iSfYZuAiCLy_Dtz4NOhQ98Z0Xpb0EdKZdFDLBDIH7So,1211
38
38
  parsl/configs/polaris.py,sha256=rbUdeFC-R4YGcs3cShfs66IuZEKyBx_sFrVdjje_l_g,1731
39
39
  parsl/configs/stampede2.py,sha256=2FTUZ6lQ-0_b0xtpDC6ZngFBhqc_vI45dHOSwrtzl3Y,1405
40
40
  parsl/configs/summit.py,sha256=wCiYDwNomgVAy79Of1_gywtEO0oajlgm9mOvUTBaGSc,1153
@@ -53,7 +53,7 @@ parsl/data_provider/staging.py,sha256=ZDZuuFg38pjUStegKPcvPsfGp3iMeReMzfU6DSwtJj
53
53
  parsl/data_provider/zip.py,sha256=S4kVuH9lxAegRURYbvIUR7EYYBOccyslaqyCrVWUBhw,4497
54
54
  parsl/dataflow/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
55
55
  parsl/dataflow/dependency_resolvers.py,sha256=Om8Dgh7a0ZwgXAc6TlhxLSzvxXHDlNNV1aBNiD3JTNY,3325
56
- parsl/dataflow/dflow.py,sha256=9-aD-CmOgjAkXykZsfZ6OAVbOhlNjMmM83J5dEq_Wrg,61941
56
+ parsl/dataflow/dflow.py,sha256=ztSXUn5gmdafikpaPFe88jMkT-1gu4p3dFNY85WdWA8,62588
57
57
  parsl/dataflow/errors.py,sha256=daVfr2BWs1zRsGD6JtosEMttWHvK1df1Npiu_MUvFKg,3998
58
58
  parsl/dataflow/futures.py,sha256=08LuP-HFiHBIZmeKCjlsazw_WpQ5fwevrU2_WbidkYw,6080
59
59
  parsl/dataflow/memoization.py,sha256=QUkTduZ_gdr8i08VWNWrqhfEvoMGsPDZegWUE2_7sGQ,12579
@@ -61,28 +61,28 @@ parsl/dataflow/rundirs.py,sha256=JZdzybVGubY35jL2YiKcDo65ZmRl1WyOApc8ajYxztc,108
61
61
  parsl/dataflow/states.py,sha256=hV6mfv-y4A6xrujeQglcomnfEs7y3Xm2g6JFwC6dvgQ,2612
62
62
  parsl/dataflow/taskrecord.py,sha256=qIW7T6hn9dYTuNPdUura3HQwwUpUJACwPP5REm5COf4,3042
63
63
  parsl/executors/__init__.py,sha256=PEuXYrnVqwlaz_nt82s9D_YNaVsX7ET29DeIZRUR8hw,577
64
- parsl/executors/base.py,sha256=OApNwTcBrzVXweWFPj8rMrP87qStcvF2facsxaevSqA,4568
64
+ parsl/executors/base.py,sha256=Qlc7Qa-jbfGpQcGB29JUFXCdhcSN63bjGubEcbDk270,4948
65
65
  parsl/executors/errors.py,sha256=ZxL3nK5samPos8Xixo_jpRtPIiRJfZ5D397_qaXj2g0,2515
66
66
  parsl/executors/execute_task.py,sha256=PtqHxk778UQaNah1AN-TJV5emZbOcU5TGtWDxFn3_F4,1079
67
67
  parsl/executors/globus_compute.py,sha256=p59iBrv2BvYUAZ3YZSpOrm_Wpai592ueiJm3zFS7gvY,5304
68
68
  parsl/executors/status_handling.py,sha256=n2DLASEvKZNgFpviAMYDfqcAsxMiU7QxFemw91YSenc,15746
69
- parsl/executors/threads.py,sha256=JkbjJGtZPJNzsVF3DFQHOsZpKmFr7wcGbH1wbwDPSrw,3754
69
+ parsl/executors/threads.py,sha256=lX9VuaMDBg_dqAObKfeaZlYCY4-ti33U-YMWOhWFGTY,4141
70
70
  parsl/executors/flux/__init__.py,sha256=P9grTTeRPXfqXurFhlSS7XhmE6tTbnCnyQ1f9b-oYHE,136
71
71
  parsl/executors/flux/execute_parsl_task.py,sha256=zHP5M7ILGiwnoalZ8WsfVVdZM7uP4iQo2ThVh4crxpM,1530
72
72
  parsl/executors/flux/executor.py,sha256=NLdjOli5VjrSdEfyWbfqKN_8APvFkp_qFCouS_9NeLQ,17069
73
73
  parsl/executors/flux/flux_instance_manager.py,sha256=5T3Rp7ZM-mlT0Pf0Gxgs5_YmnaPrSF9ec7zvRfLfYJw,2129
74
74
  parsl/executors/high_throughput/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
75
75
  parsl/executors/high_throughput/errors.py,sha256=k2XuvvFdUfNs2foHFnxmS-BToRMfdXpYEa4EF3ELKq4,1554
76
- parsl/executors/high_throughput/executor.py,sha256=JTNgVfZfwzgH9RheMWCCDuNd_1i3LN69B_SYzL7rY3Q,39840
77
- parsl/executors/high_throughput/interchange.py,sha256=lnPhV-5OR_rp4fa_Wj0tmG3avwUdPgJH4LTTBZQcrf8,28922
76
+ parsl/executors/high_throughput/executor.py,sha256=i1XMvB0h40gReWyD4ID14VxdF-Pftl4iGa9vyxC6nKQ,39939
77
+ parsl/executors/high_throughput/interchange.py,sha256=pS724a_m66iYDrxngCZy9K-_U0Yl7BaDwOeVShZYWDQ,25838
78
78
  parsl/executors/high_throughput/manager_record.py,sha256=ZMsqFxvreGLRXAw3N-JnODDa9Qfizw2tMmcBhm4lco4,490
79
79
  parsl/executors/high_throughput/manager_selector.py,sha256=UKcUE6v0tO7PDMTThpKSKxVpOpOUilxDL7UbNgpZCxo,2116
80
80
  parsl/executors/high_throughput/monitoring_info.py,sha256=HC0drp6nlXQpAop5PTUKNjdXMgtZVvrBL0JzZJebPP4,298
81
- parsl/executors/high_throughput/mpi_executor.py,sha256=AKc5OX7mNH9eYPiBL1g7Xlrj3P-ouniDgE17bhpIems,5052
81
+ parsl/executors/high_throughput/mpi_executor.py,sha256=P8n81Y9t5cw-YuNFgkrGtc4oG75ntBJDonUIfhkp_5I,5223
82
82
  parsl/executors/high_throughput/mpi_prefix_composer.py,sha256=DmpKugANNa1bdYlqQBLHkrFc15fJpefPPhW9hkAlh1s,4308
83
83
  parsl/executors/high_throughput/mpi_resource_management.py,sha256=73bTW2ZbHRfcrPN318cyjiqDN50AM1cOCQqUGJDIlBg,8199
84
- parsl/executors/high_throughput/probe.py,sha256=QOEaliO3x5cB6ltMOZMsZQ-ath9AAuFqXcBzRgWOM60,2754
85
- parsl/executors/high_throughput/process_worker_pool.py,sha256=Q7FN0MdXIAOouxDarim6etYVHEgbXFiaMhBahC2ZtIQ,41137
84
+ parsl/executors/high_throughput/probe.py,sha256=SwU6yyntDRFfLGwBeZwuYHJWcpQ0clXvQ-wy39ALDfg,2734
85
+ parsl/executors/high_throughput/process_worker_pool.py,sha256=TU3ZaOqgadGEO3qRxWU4K-MDtHAYuZYXVTU1Zel35SE,40286
86
86
  parsl/executors/high_throughput/zmq_pipes.py,sha256=NUK25IEh0UkxzdqQQyM8tMtuZmjSiTeWu1DzkkAIOhA,8980
87
87
  parsl/executors/radical/__init__.py,sha256=CKbtV2numw5QvgIBq1htMUrt9TqDCIC2zifyf2svTNU,186
88
88
  parsl/executors/radical/executor.py,sha256=e3XS4mvug1uJ6wrt4UH6hBgfbDbc-mQH3xUW2ZmBsMQ,22888
@@ -91,16 +91,16 @@ parsl/executors/radical/rpex_worker.py,sha256=z6r82ZujKb6sdKIdHsQ_5EBMDIQieeGcrl
91
91
  parsl/executors/taskvine/__init__.py,sha256=9rwp3M8B0YyEhZMLO0RHaNw7u1nc01WHbXLqnBTanu0,293
92
92
  parsl/executors/taskvine/errors.py,sha256=euIYkSslrNSI85kyi2s0xzOaO9ik4c1fYHstMIeiBJk,652
93
93
  parsl/executors/taskvine/exec_parsl_function.py,sha256=ftGdJU78lKPPkphSHlEi4rj164mhuMHJjghVqfgeXKk,7085
94
- parsl/executors/taskvine/executor.py,sha256=h47c90QoaeoWcqTdJKgfqwQBZVW-kkF44O95sKUfJ8g,30978
94
+ parsl/executors/taskvine/executor.py,sha256=AXLQZHhibGpApddq8CvEVObWBS91F_dpzIz61nc19co,31326
95
95
  parsl/executors/taskvine/factory.py,sha256=GU5JryEAKJuYKwrSc162BN-lhcKhapvBZHT820pxwic,2772
96
96
  parsl/executors/taskvine/factory_config.py,sha256=ZQC5vyDe8cM0nuv7fbBCV2xnWGAZ87iLlT2UqmFFI1U,3695
97
- parsl/executors/taskvine/manager.py,sha256=SUi5mqqMm_rnkBLrZtTQe7RiHqWDn1oOejQscYzfwAU,25797
97
+ parsl/executors/taskvine/manager.py,sha256=2GKpw9bnA2NQmti1AACZ6gHRVa8MN88NBk6j5VyTUIY,25935
98
98
  parsl/executors/taskvine/manager_config.py,sha256=96G1LMBvgg74sHX4UcOzkCXhEdtVXry4ZzMDEYLWBTQ,7669
99
99
  parsl/executors/taskvine/utils.py,sha256=iSrIogeiauL3UNy_9tiZp1cBSNn6fIJkMYQRVi1n_r8,4156
100
100
  parsl/executors/workqueue/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
101
101
  parsl/executors/workqueue/errors.py,sha256=XO2naYhAsHHyiOBH6hpObg3mPNDmvMoFqErsj0-v7jc,541
102
102
  parsl/executors/workqueue/exec_parsl_function.py,sha256=YXKVVIa4zXmOtz-0Ca4E_5nQfN_3S2bh2tB75uZZB4w,7774
103
- parsl/executors/workqueue/executor.py,sha256=R4cBX3Ac2OePpKsXo-4Kq68X6wAkyltYkhLysk45QwY,49855
103
+ parsl/executors/workqueue/executor.py,sha256=PpJVu4Fa12bqnhE4gkFtXtjYjjMOAuCsyuKFmYsBn4I,50203
104
104
  parsl/executors/workqueue/parsl_coprocess.py,sha256=cF1UmTgVLoey6QzBcbYgEiEsRidSaFfuO54f1HFw_EM,5737
105
105
  parsl/executors/workqueue/parsl_coprocess_stub.py,sha256=_bJmpPIgL42qM6bVzeEKt1Mn1trSP41rtJguXxPGfHI,735
106
106
  parsl/jobs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -115,21 +115,21 @@ parsl/launchers/errors.py,sha256=8YMV_CHpBNVa4eXkGE4x5DaFQlZkDCRCHmBktYcY6TA,467
115
115
  parsl/launchers/launchers.py,sha256=cQsNsHuCOL_nQTjPXf0--YsgsDoMoJ77bO1Wt4ncLjs,15134
116
116
  parsl/monitoring/__init__.py,sha256=0ywNz6i0lM1xo_7_BIxhETDGeVd2C_0wwD7qgeaMR4c,83
117
117
  parsl/monitoring/db_manager.py,sha256=L0c5S9ockq0UIchT2bjmkSAWXS-t0G-Q_neOIBfLbm0,33444
118
- parsl/monitoring/errors.py,sha256=pol4Xp9lkpTurc1F5vJ0g48R4R-nUr8GBHubD7SU9Aw,165
118
+ parsl/monitoring/errors.py,sha256=VQNIMoo5Ro8GlJ-Ad-6q-YA0y6sTc-IibSdNXZC-GuU,306
119
119
  parsl/monitoring/message_type.py,sha256=Khn88afNxcOIciKiCK4GLnn90I5BlRTiOL3zK-P07yQ,401
120
- parsl/monitoring/monitoring.py,sha256=8g8JVbR9Nq2JV17EBBwMaFFR-kvKDVd_PWtHyO0vUlQ,7564
121
- parsl/monitoring/remote.py,sha256=t0qCTUMCzeJ_JOARFpjqlTNrAWdEb20BxhmZh9X7kEM,13728
120
+ parsl/monitoring/monitoring.py,sha256=oIXwI_oxan-b1XdTneoza--4uTqYF6ar2X4zWgarGVQ,6602
121
+ parsl/monitoring/remote.py,sha256=Kki5sTnZwHUIFMJh99w11vQrKxiHGO7ElBydwAIctbY,12636
122
122
  parsl/monitoring/types.py,sha256=oOCrzv-ab-_rv4pb8o58Sdb8G_RGp1aZriRbdf9zBEk,339
123
123
  parsl/monitoring/queries/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
124
124
  parsl/monitoring/queries/pandas.py,sha256=0Z2r0rjTKCemf0eaDkF1irvVHn5g7KC5SYETvQPRxwU,2232
125
125
  parsl/monitoring/radios/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
126
- parsl/monitoring/radios/base.py,sha256=MBW3aAbxQY7TMuNGZEN15dWoy3mAELOqz-GMN1d7vF4,221
127
- parsl/monitoring/radios/filesystem.py,sha256=nn9NJ7EteEAixkqS2b0jJ9M7j55xdouXmYiK0qu5AjY,1763
128
- parsl/monitoring/radios/filesystem_router.py,sha256=T6Okb5deWeLwaugb1Bkskjfdz1_KpM6pX2EyQLey8p4,3312
129
- parsl/monitoring/radios/htex.py,sha256=1v4on4_KmJa_PuEc3a9OrL4NJV2h0bIuUKh_mdoPVKc,1641
130
- parsl/monitoring/radios/multiprocessing.py,sha256=fsfaaoMDp6VJv1DSAl-P0R2ofO6jp13byx6NsPItV3Y,655
131
- parsl/monitoring/radios/udp.py,sha256=bTpt7JYp-5hyBBLzgiLj1_BlSTn28UVp39OYgVGLXCw,1613
132
- parsl/monitoring/radios/udp_router.py,sha256=M7UtHx5dYphKU4YKB2KmkA7aZRtqOFcxuaLVvBn8QJA,7590
126
+ parsl/monitoring/radios/base.py,sha256=LnTWz4Czew-Nh6TwHMGXLHO8bH5zlSoMO-0rkqyezO0,2622
127
+ parsl/monitoring/radios/filesystem.py,sha256=R6ueEVsmmx1ltpBdZUILYLAueiSe8KwTJLqjseaySNo,2240
128
+ parsl/monitoring/radios/filesystem_router.py,sha256=_Sf1M00oUn-gBvq-P7Ua1Ws5_SbPFiTQvYAJ1Q6Mbro,2992
129
+ parsl/monitoring/radios/htex.py,sha256=R3Ce7fxiVtQFxn0EgJ-9wKiMJ_xCJml02b0rXnxORXQ,1870
130
+ parsl/monitoring/radios/multiprocessing.py,sha256=4ua-6kmdQ6XiXzPBM8DjkFXy1LP5x0sERxeaR-WyKHc,1308
131
+ parsl/monitoring/radios/udp.py,sha256=vrcl-yHWQ9YpOw6cmAQgczlNAUr_Um1y-GLye-9j-7s,3499
132
+ parsl/monitoring/radios/udp_router.py,sha256=r-u_RmvlY3cx_3a7dCaKJO6M5-446o2scDsAEqrz_go,8987
133
133
  parsl/monitoring/radios/zmq.py,sha256=fhoHp9ylhf-D3eTJb2aSHRsuic8-FJ_oRNGnniGkCAI,592
134
134
  parsl/monitoring/radios/zmq_router.py,sha256=oqGlOI4OkmvGLNKGp5F0iLFLYj3JdUkpnwg40JOvEak,7826
135
135
  parsl/monitoring/visualization/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -175,7 +175,7 @@ parsl/providers/kubernetes/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJ
175
175
  parsl/providers/kubernetes/kube.py,sha256=WFCsIVWwXMxjOvfjZIm40YTEAYT11dj8KHICVcXZuaI,15515
176
176
  parsl/providers/kubernetes/template.py,sha256=VsRz6cmNaII-y4OdMT6sCwzQy95SJX6NMB0hmmFBhX4,50
177
177
  parsl/providers/local/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
178
- parsl/providers/local/local.py,sha256=s8Qx3ONJNoCrC-fYTDrZ_RHwmgmCsFpe9y9Y5hYvSYA,10472
178
+ parsl/providers/local/local.py,sha256=3AxfINGwHrROy1geQzC7FAp61-Hfs1EkSpMmXmLpDSI,10306
179
179
  parsl/providers/lsf/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
180
180
  parsl/providers/lsf/lsf.py,sha256=dB3CwYY39rM7E2dg3eP2UkeNHvatBxfl6JJns6FvLEY,10661
181
181
  parsl/providers/lsf/template.py,sha256=leQ_TpXv7ePMzbHfLaWvqMR0VORxlp-hjX5JxtkcwwU,269
@@ -217,7 +217,7 @@ parsl/tests/configs/flux_local.py,sha256=xliKQfB5FFpfNHWYEHoA8FKOTVHFCXVhWNuKQ5V
217
217
  parsl/tests/configs/frontera.py,sha256=WEXJjFmHMhFT8X8JLUIUK35Qm2FRDolhOCAaE0zlL0U,1483
218
218
  parsl/tests/configs/globus_compute.py,sha256=5lRtOVmXSUJ1vLgCk3eoR96GVX-vitP9IsU8_e3netE,418
219
219
  parsl/tests/configs/htex_local.py,sha256=6TKsAbEyFknFWT1cpMyd34DmPoo0OrsyPTayzSf2OFQ,675
220
- parsl/tests/configs/htex_local_alternate.py,sha256=CgIpjBpenLn-xOG0Ix5xrWgqO8wllOFnNXomJEWSkDY,2453
220
+ parsl/tests/configs/htex_local_alternate.py,sha256=2ErwD2QNmmiUVZtqdP4TIBNyCW8MQl27HxclgXaSirE,2404
221
221
  parsl/tests/configs/htex_local_intask_staging.py,sha256=JTcrc8qNseF1sdBHxX_BfiGc-ZCPv7HXHlzZ94Jh-YE,806
222
222
  parsl/tests/configs/htex_local_rsync_staging.py,sha256=WaETbdg6y9PHY8p_3N3eTsuK5b_L2Znke0KW_XlVhVQ,860
223
223
  parsl/tests/configs/local_radical.py,sha256=C70I6ssfaaHEY1MMCC77izpp6sdANALH-P2mDR2msN0,417
@@ -324,7 +324,7 @@ parsl/tests/test_htex/test_disconnected_blocks.py,sha256=3V1Ol9gMS6knjLTgIjB5Gru
324
324
  parsl/tests/test_htex/test_disconnected_blocks_failing_provider.py,sha256=eOdipRpKMOkWAXB3UtY1UjqTiwfNs_csNLve8vllG_M,2040
325
325
  parsl/tests/test_htex/test_drain.py,sha256=gYA7qzbv5ozox3clVdW0rlxAzwa_f_P0kqsAez3tIfk,2370
326
326
  parsl/tests/test_htex/test_htex.py,sha256=J1uEGezic8ziPPZsQwfK9iNiTJ53NqXMhIg9CUunjZw,4901
327
- parsl/tests/test_htex/test_interchange_exit_bad_registration.py,sha256=3yqX_VVQz9fCEiV6Wd1BlcFYcARDDpNaR6ws7LWn-oc,4549
327
+ parsl/tests/test_htex/test_interchange_exit_bad_registration.py,sha256=fQGNp5jX1m6cQAT1gr519GLMxviYtG-Fs43ru9Yyoec,4485
328
328
  parsl/tests/test_htex/test_manager_failure.py,sha256=N-obuSZ8f7XA_XcddoN2LWKSVtpKUZvTHb7BFelS3iQ,1143
329
329
  parsl/tests/test_htex/test_manager_selector_by_block.py,sha256=VQqSE6MDhGpDSjShGUTbj7l9Ahuj2tC9qD--o4puF44,1310
330
330
  parsl/tests/test_htex/test_managers_command.py,sha256=SCwkfyGB-Udgu5L2yDMpR5bsaT-aNjNkiXxtuRb25DI,1622
@@ -333,20 +333,21 @@ parsl/tests/test_htex/test_multiple_disconnected_blocks.py,sha256=2vXZoIx4NuAWYu
333
333
  parsl/tests/test_htex/test_priority_queue.py,sha256=vH58WwDZVpyIiMqhjwGkme7Cv5-jupTmM52EOcbdrEg,2106
334
334
  parsl/tests/test_htex/test_resource_spec_validation.py,sha256=ZXW02jDd1rNxjBLh1jHyiz31zNoB9JzDw94aWllXFd4,1102
335
335
  parsl/tests/test_htex/test_worker_failure.py,sha256=Uz-RHI-LK78FMjXUvrUFmo4iYfmpDVBUcBxxRb3UG9M,603
336
- parsl/tests/test_htex/test_zmq_binding.py,sha256=G7D2_p9vOekgpB50MBiPRwtIz98DEkUpMqA3rdwzYTQ,4397
336
+ parsl/tests/test_htex/test_zmq_binding.py,sha256=RaUK6Pmvg8v2vqXg3fFj-k2bQ8Cbuxh6dprsq2WSA98,4339
337
337
  parsl/tests/test_monitoring/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
338
338
  parsl/tests/test_monitoring/test_app_names.py,sha256=A-mOMCVhZDnUyJp32fsTUkHdcyval8o7WPEWacDkbD4,2208
339
- parsl/tests/test_monitoring/test_basic.py,sha256=QJS0SJkf1KV6A4UvikBu-wAIcBJZVoVe-BSVWgyFonI,6180
339
+ parsl/tests/test_monitoring/test_basic.py,sha256=qyKKzjmoYwQC485Xk4QHqU3FvVILpuIjnJThMOl7pq4,6316
340
340
  parsl/tests/test_monitoring/test_db_locks.py,sha256=3s3c1xhKo230ZZIJ3f1Ca4U7LcEdXnanOGVXQyNlk2U,2895
341
341
  parsl/tests/test_monitoring/test_exit_helper.py,sha256=ob8Qd1hlkq_mowygfPetTnYN9LfuqeXHRpPilSfDSog,1232
342
342
  parsl/tests/test_monitoring/test_htex_fuzz_zmq.py,sha256=MUaVBVjmoKSVg00DlMIRdj9KUizYvHjzW95Y3n_ViqE,3659
343
- parsl/tests/test_monitoring/test_htex_init_blocks_vs_monitoring.py,sha256=_QV8zjBKVF_qBbBnhT0C3X9AmfS7IKLcOnEw_cU6HeM,2622
343
+ parsl/tests/test_monitoring/test_htex_init_blocks_vs_monitoring.py,sha256=r3F3l7_vV45ns6qrs0se9XkeFa00kUiHaI6NB3bXyMo,2573
344
344
  parsl/tests/test_monitoring/test_incomplete_futures.py,sha256=ZnO1sFSwlWUBHX64C_zwfTVRVC_UFNlU4h0POgx6NEo,2005
345
345
  parsl/tests/test_monitoring/test_memoization_representation.py,sha256=dknv2nO7pNZ1jGxWGsC_AW3rs90gjMIeC5d7pIJ75Xc,2645
346
- parsl/tests/test_monitoring/test_radio_filesystem.py,sha256=hA-RXmU29nEG4Dm6eLcyVYoTdGog_wvYDcvNsN5-3lU,1531
347
- parsl/tests/test_monitoring/test_radio_udp.py,sha256=dyb9SOY-ceSuZ4R2rAIn-7DqsRljYl4U6zNdACyCACU,1538
346
+ parsl/tests/test_monitoring/test_radio_filesystem.py,sha256=YVkPbStNzzAi5BwwladUzKUX5FuKgKaXGOQ9_rn9NjU,1304
347
+ parsl/tests/test_monitoring/test_radio_multiprocessing.py,sha256=S6O3KcZB9ypL-p4Y99ObOas70Al5X9rUeFjKpbP2STc,1246
348
+ parsl/tests/test_monitoring/test_radio_udp.py,sha256=fIO5z-RAAl88inKcNr-5P94VM621ktLB2pessrrMor8,6448
348
349
  parsl/tests/test_monitoring/test_radio_zmq.py,sha256=7ARjDbde9kSuP4NCx_z-UtmMf2X5opbkkKM7mZcayuA,783
349
- parsl/tests/test_monitoring/test_stdouterr.py,sha256=SEMKBk4v5Saoq3QiraFpzUpVe5vS_132GQPSf1Qu0qM,4573
350
+ parsl/tests/test_monitoring/test_stdouterr.py,sha256=vZZVZhCfMSboW9f4H_z9syM1DbYI6Ja2OXKkxIF07YI,4516
350
351
  parsl/tests/test_monitoring/test_viz_colouring.py,sha256=83Qdmn3gM0j7IL6kPDcuIsp_nl4zj-liPijyIN632SY,592
351
352
  parsl/tests/test_mpi_apps/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
352
353
  parsl/tests/test_mpi_apps/test_bad_mpi_config.py,sha256=QKvEUSrHIBrvqu2fRj1MAqxsYxDfcrdQ7dzWdOZejuU,1320
@@ -415,7 +416,7 @@ parsl/tests/test_scaling/test_scale_down.py,sha256=GmxzNtlG13SySVDGGlSqXEnaHxyCx
415
416
  parsl/tests/test_scaling/test_scale_down_htex_auto_scale.py,sha256=EnVNllKO2AGKkGa6927cLrzvvG6mpNQeFDzVktv6x08,4521
416
417
  parsl/tests/test_scaling/test_scale_down_htex_unregistered.py,sha256=OrdnYmd58n7UfkANPJ7mzha4WSCPdbgJRX1O1Zdu0tI,1954
417
418
  parsl/tests/test_scaling/test_shutdown_scalein.py,sha256=sr40of5DwxeyQI97MDZxFqJILZSXZJb9Dv7qTf2gql8,2471
418
- parsl/tests/test_scaling/test_worker_interchange_bad_messages_3262.py,sha256=GaXmRli1srTal-JQmCGDTP4BAwAKI_daXMmrjULsZkY,2788
419
+ parsl/tests/test_scaling/test_worker_interchange_bad_messages_3262.py,sha256=wDv6JD-4OZ70Hw8pfOd12wOKzGtTuAsSqjoy-4tBV0k,2738
419
420
  parsl/tests/test_serialization/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
420
421
  parsl/tests/test_serialization/test_2555_caching_deserializer.py,sha256=jEXJvbriaLVI7frV5t-iJRKYyeQ7a9_-t3X9lhhBWQo,767
421
422
  parsl/tests/test_serialization/test_3495_deserialize_managerlost.py,sha256=GoMtK6BmARicawzYR2eQj5jUSL9RZ_tHV3g19BdQuQ8,1144
@@ -460,13 +461,13 @@ parsl/usage_tracking/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hS
460
461
  parsl/usage_tracking/api.py,sha256=iaCY58Dc5J4UM7_dJzEEs871P1p1HdxBMtNGyVdzc9g,1821
461
462
  parsl/usage_tracking/levels.py,sha256=xbfzYEsd55KiZJ-mzNgPebvOH4rRHum04hROzEf41tU,291
462
463
  parsl/usage_tracking/usage.py,sha256=hbMo5BYgIWqMcFWqN-HYP1TbwNrTonpv-usfwnCFJKY,9212
463
- parsl-2025.6.23.data/scripts/exec_parsl_function.py,sha256=YXKVVIa4zXmOtz-0Ca4E_5nQfN_3S2bh2tB75uZZB4w,7774
464
- parsl-2025.6.23.data/scripts/interchange.py,sha256=_FRB1LxkL9vnT3y24NTXHOzotMlDJEXwF5ZZCjGmcww,28909
465
- parsl-2025.6.23.data/scripts/parsl_coprocess.py,sha256=zrVjEqQvFOHxsLufPi00xzMONagjVwLZbavPM7bbjK4,5722
466
- parsl-2025.6.23.data/scripts/process_worker_pool.py,sha256=__gFeFQJpV5moRofj3WKQCnKp6gmzieXjzkmzVuTmX4,41123
467
- parsl-2025.6.23.dist-info/LICENSE,sha256=tAkwu8-AdEyGxGoSvJ2gVmQdcicWw3j1ZZueVV74M-E,11357
468
- parsl-2025.6.23.dist-info/METADATA,sha256=MzCr6YRZ0einE2SSqmtGkBDaX8tdfR0I57QP3W3QOXE,4055
469
- parsl-2025.6.23.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
470
- parsl-2025.6.23.dist-info/entry_points.txt,sha256=XqnsWDYoEcLbsMcpnYGKLEnSBmaIe1YoM5YsBdJG2tI,176
471
- parsl-2025.6.23.dist-info/top_level.txt,sha256=PIheYoUFQtF2icLsgOykgU-Cjuwr2Oi6On2jo5RYgRM,6
472
- parsl-2025.6.23.dist-info/RECORD,,
464
+ parsl-2025.6.30.data/scripts/exec_parsl_function.py,sha256=YXKVVIa4zXmOtz-0Ca4E_5nQfN_3S2bh2tB75uZZB4w,7774
465
+ parsl-2025.6.30.data/scripts/interchange.py,sha256=sbvqyLhW1XrepjCCWL_f9KcAinkTfpHrLg5t28gBr8s,25825
466
+ parsl-2025.6.30.data/scripts/parsl_coprocess.py,sha256=zrVjEqQvFOHxsLufPi00xzMONagjVwLZbavPM7bbjK4,5722
467
+ parsl-2025.6.30.data/scripts/process_worker_pool.py,sha256=JdCR9-BJK34whhTuAjAadc0qt1tedr-Km7_0bG9BngE,40272
468
+ parsl-2025.6.30.dist-info/LICENSE,sha256=tAkwu8-AdEyGxGoSvJ2gVmQdcicWw3j1ZZueVV74M-E,11357
469
+ parsl-2025.6.30.dist-info/METADATA,sha256=D6v24noLAQU8Ka6dYD6bI5wB7-3Kg4B2AXqaR9gpdXQ,4055
470
+ parsl-2025.6.30.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
471
+ parsl-2025.6.30.dist-info/entry_points.txt,sha256=XqnsWDYoEcLbsMcpnYGKLEnSBmaIe1YoM5YsBdJG2tI,176
472
+ parsl-2025.6.30.dist-info/top_level.txt,sha256=PIheYoUFQtF2icLsgOykgU-Cjuwr2Oi6On2jo5RYgRM,6
473
+ parsl-2025.6.30.dist-info/RECORD,,