parsl 2024.7.29__py3-none-any.whl → 2024.8.12__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 (50) hide show
  1. parsl/channels/__init__.py +1 -4
  2. parsl/channels/oauth_ssh/oauth_ssh.py +2 -2
  3. parsl/channels/ssh/ssh.py +1 -1
  4. parsl/channels/ssh_il/ssh_il.py +2 -2
  5. parsl/dataflow/dflow.py +2 -2
  6. parsl/executors/base.py +7 -7
  7. parsl/executors/high_throughput/executor.py +15 -7
  8. parsl/executors/high_throughput/interchange.py +40 -37
  9. parsl/executors/high_throughput/manager_selector.py +25 -0
  10. parsl/executors/status_handling.py +38 -24
  11. parsl/executors/taskvine/executor.py +2 -0
  12. parsl/executors/workqueue/executor.py +2 -0
  13. parsl/monitoring/db_manager.py +10 -10
  14. parsl/monitoring/errors.py +6 -0
  15. parsl/monitoring/monitoring.py +3 -3
  16. parsl/monitoring/radios.py +16 -0
  17. parsl/monitoring/remote.py +4 -4
  18. parsl/monitoring/router.py +71 -35
  19. parsl/providers/__init__.py +0 -4
  20. parsl/providers/ad_hoc/ad_hoc.py +6 -2
  21. parsl/tests/configs/local_adhoc.py +2 -2
  22. parsl/tests/test_htex/test_disconnected_blocks_failing_provider.py +71 -0
  23. parsl/tests/test_htex/test_htex.py +28 -19
  24. parsl/tests/test_htex/test_zmq_binding.py +4 -1
  25. parsl/tests/test_monitoring/test_basic.py +14 -1
  26. parsl/tests/test_mpi_apps/test_mpiex.py +1 -1
  27. parsl/tests/test_providers/test_local_provider.py +6 -5
  28. parsl/version.py +1 -1
  29. {parsl-2024.7.29.data → parsl-2024.8.12.data}/scripts/interchange.py +40 -37
  30. parsl-2024.8.12.dist-info/METADATA +101 -0
  31. {parsl-2024.7.29.dist-info → parsl-2024.8.12.dist-info}/RECORD +38 -46
  32. {parsl-2024.7.29.dist-info → parsl-2024.8.12.dist-info}/WHEEL +1 -1
  33. parsl/configs/ad_hoc.py +0 -38
  34. parsl/tests/configs/ad_hoc_cluster_htex.py +0 -35
  35. parsl/tests/configs/htex_ad_hoc_cluster.py +0 -26
  36. parsl/tests/configs/swan_htex.py +0 -43
  37. parsl/tests/integration/test_channels/test_scp_1.py +0 -45
  38. parsl/tests/integration/test_channels/test_ssh_1.py +0 -40
  39. parsl/tests/integration/test_channels/test_ssh_errors.py +0 -46
  40. parsl/tests/integration/test_channels/test_ssh_file_transport.py +0 -41
  41. parsl/tests/integration/test_channels/test_ssh_interactive.py +0 -24
  42. parsl/tests/manual_tests/test_ad_hoc_htex.py +0 -49
  43. parsl/tests/manual_tests/test_oauth_ssh.py +0 -13
  44. parsl-2024.7.29.dist-info/METADATA +0 -101
  45. {parsl-2024.7.29.data → parsl-2024.8.12.data}/scripts/exec_parsl_function.py +0 -0
  46. {parsl-2024.7.29.data → parsl-2024.8.12.data}/scripts/parsl_coprocess.py +0 -0
  47. {parsl-2024.7.29.data → parsl-2024.8.12.data}/scripts/process_worker_pool.py +0 -0
  48. {parsl-2024.7.29.dist-info → parsl-2024.8.12.dist-info}/LICENSE +0 -0
  49. {parsl-2024.7.29.dist-info → parsl-2024.8.12.dist-info}/entry_points.txt +0 -0
  50. {parsl-2024.7.29.dist-info → parsl-2024.8.12.dist-info}/top_level.txt +0 -0
@@ -6,7 +6,6 @@ import os
6
6
  import pickle
7
7
  import platform
8
8
  import queue
9
- import random
10
9
  import signal
11
10
  import sys
12
11
  import threading
@@ -19,7 +18,9 @@ from parsl import curvezmq
19
18
  from parsl.app.errors import RemoteExceptionWrapper
20
19
  from parsl.executors.high_throughput.errors import ManagerLost, VersionMismatch
21
20
  from parsl.executors.high_throughput.manager_record import ManagerRecord
21
+ from parsl.executors.high_throughput.manager_selector import ManagerSelector
22
22
  from parsl.monitoring.message_type import MessageType
23
+ from parsl.monitoring.radios import MonitoringRadioSender, ZMQRadioSender
23
24
  from parsl.process_loggers import wrap_with_logs
24
25
  from parsl.serialize import serialize as serialize_object
25
26
  from parsl.utils import setproctitle
@@ -53,6 +54,8 @@ class Interchange:
53
54
  logging_level: int,
54
55
  poll_period: int,
55
56
  cert_dir: Optional[str],
57
+ manager_selector: ManagerSelector,
58
+ run_id: str,
56
59
  ) -> None:
57
60
  """
58
61
  Parameters
@@ -123,6 +126,8 @@ class Interchange:
123
126
  self.command_channel.connect("tcp://{}:{}".format(client_address, client_ports[2]))
124
127
  logger.info("Connected to client")
125
128
 
129
+ self.run_id = run_id
130
+
126
131
  self.hub_address = hub_address
127
132
  self.hub_zmq_port = hub_zmq_port
128
133
 
@@ -160,6 +165,8 @@ class Interchange:
160
165
 
161
166
  self.heartbeat_threshold = heartbeat_threshold
162
167
 
168
+ self.manager_selector = manager_selector
169
+
163
170
  self.current_platform = {'parsl_v': PARSL_VERSION,
164
171
  'python_v': "{}.{}.{}".format(sys.version_info.major,
165
172
  sys.version_info.minor,
@@ -216,27 +223,16 @@ class Interchange:
216
223
  task_counter += 1
217
224
  logger.debug(f"Fetched {task_counter} tasks so far")
218
225
 
219
- def _create_monitoring_channel(self) -> Optional[zmq.Socket]:
220
- if self.hub_address and self.hub_zmq_port:
221
- logger.info("Connecting to MonitoringHub")
222
- # This is a one-off because monitoring is unencrypted
223
- hub_channel = zmq.Context().socket(zmq.DEALER)
224
- hub_channel.set_hwm(0)
225
- hub_channel.connect("tcp://{}:{}".format(self.hub_address, self.hub_zmq_port))
226
- logger.info("Connected to MonitoringHub")
227
- return hub_channel
228
- else:
229
- return None
230
-
231
- def _send_monitoring_info(self, hub_channel: Optional[zmq.Socket], manager: ManagerRecord) -> None:
232
- if hub_channel:
226
+ def _send_monitoring_info(self, monitoring_radio: Optional[MonitoringRadioSender], manager: ManagerRecord) -> None:
227
+ if monitoring_radio:
233
228
  logger.info("Sending message {} to MonitoringHub".format(manager))
234
229
 
235
230
  d: Dict = cast(Dict, manager.copy())
236
231
  d['timestamp'] = datetime.datetime.now()
237
232
  d['last_heartbeat'] = datetime.datetime.fromtimestamp(d['last_heartbeat'])
233
+ d['run_id'] = self.run_id
238
234
 
239
- hub_channel.send_pyobj((MessageType.NODE_INFO, d))
235
+ monitoring_radio.send((MessageType.NODE_INFO, d))
240
236
 
241
237
  @wrap_with_logs(target="interchange")
242
238
  def _command_server(self) -> NoReturn:
@@ -244,8 +240,11 @@ class Interchange:
244
240
  """
245
241
  logger.debug("Command Server Starting")
246
242
 
247
- # Need to create a new ZMQ socket for command server thread
248
- hub_channel = self._create_monitoring_channel()
243
+ if self.hub_address is not None and self.hub_zmq_port is not None:
244
+ logger.debug("Creating monitoring radio to %s:%s", self.hub_address, self.hub_zmq_port)
245
+ monitoring_radio = ZMQRadioSender(self.hub_address, self.hub_zmq_port)
246
+ else:
247
+ monitoring_radio = None
249
248
 
250
249
  reply: Any # the type of reply depends on the command_req received (aka this needs dependent types...)
251
250
 
@@ -295,7 +294,7 @@ class Interchange:
295
294
  if manager_id in self._ready_managers:
296
295
  m = self._ready_managers[manager_id]
297
296
  m['active'] = False
298
- self._send_monitoring_info(hub_channel, m)
297
+ self._send_monitoring_info(monitoring_radio, m)
299
298
  else:
300
299
  logger.warning("Worker to hold was not in ready managers list")
301
300
 
@@ -330,9 +329,14 @@ class Interchange:
330
329
  # parent-process-inheritance problems.
331
330
  signal.signal(signal.SIGTERM, signal.SIG_DFL)
332
331
 
333
- logger.info("Incoming ports bound")
332
+ logger.info("Starting main interchange method")
334
333
 
335
- hub_channel = self._create_monitoring_channel()
334
+ if self.hub_address is not None and self.hub_zmq_port is not None:
335
+ logger.debug("Creating monitoring radio to %s:%s", self.hub_address, self.hub_zmq_port)
336
+ monitoring_radio = ZMQRadioSender(self.hub_address, self.hub_zmq_port)
337
+ logger.debug("Created monitoring radio")
338
+ else:
339
+ monitoring_radio = None
336
340
 
337
341
  poll_period = self.poll_period
338
342
 
@@ -363,10 +367,10 @@ class Interchange:
363
367
  while not kill_event.is_set():
364
368
  self.socks = dict(poller.poll(timeout=poll_period))
365
369
 
366
- self.process_task_outgoing_incoming(interesting_managers, hub_channel, kill_event)
367
- self.process_results_incoming(interesting_managers, hub_channel)
368
- self.expire_bad_managers(interesting_managers, hub_channel)
369
- self.expire_drained_managers(interesting_managers, hub_channel)
370
+ self.process_task_outgoing_incoming(interesting_managers, monitoring_radio, kill_event)
371
+ self.process_results_incoming(interesting_managers, monitoring_radio)
372
+ self.expire_bad_managers(interesting_managers, monitoring_radio)
373
+ self.expire_drained_managers(interesting_managers, monitoring_radio)
370
374
  self.process_tasks_to_send(interesting_managers)
371
375
 
372
376
  self.zmq_context.destroy()
@@ -377,7 +381,7 @@ class Interchange:
377
381
  def process_task_outgoing_incoming(
378
382
  self,
379
383
  interesting_managers: Set[bytes],
380
- hub_channel: Optional[zmq.Socket],
384
+ monitoring_radio: Optional[MonitoringRadioSender],
381
385
  kill_event: threading.Event
382
386
  ) -> None:
383
387
  """Process one message from manager on the task_outgoing channel.
@@ -431,7 +435,7 @@ class Interchange:
431
435
  m.update(msg) # type: ignore[typeddict-item]
432
436
 
433
437
  logger.info("Registration info for manager {!r}: {}".format(manager_id, msg))
434
- self._send_monitoring_info(hub_channel, m)
438
+ self._send_monitoring_info(monitoring_radio, m)
435
439
 
436
440
  if (msg['python_v'].rsplit(".", 1)[0] != self.current_platform['python_v'].rsplit(".", 1)[0] or
437
441
  msg['parsl_v'] != self.current_platform['parsl_v']):
@@ -462,7 +466,7 @@ class Interchange:
462
466
  logger.error(f"Unexpected message type received from manager: {msg['type']}")
463
467
  logger.debug("leaving task_outgoing section")
464
468
 
465
- def expire_drained_managers(self, interesting_managers: Set[bytes], hub_channel: Optional[zmq.Socket]) -> None:
469
+ def expire_drained_managers(self, interesting_managers: Set[bytes], monitoring_radio: Optional[MonitoringRadioSender]) -> None:
466
470
 
467
471
  for manager_id in list(interesting_managers):
468
472
  # is it always true that a draining manager will be in interesting managers?
@@ -475,7 +479,7 @@ class Interchange:
475
479
  self._ready_managers.pop(manager_id)
476
480
 
477
481
  m['active'] = False
478
- self._send_monitoring_info(hub_channel, m)
482
+ self._send_monitoring_info(monitoring_radio, m)
479
483
 
480
484
  def process_tasks_to_send(self, interesting_managers: Set[bytes]) -> None:
481
485
  # Check if there are tasks that could be sent to managers
@@ -485,8 +489,7 @@ class Interchange:
485
489
  interesting=len(interesting_managers)))
486
490
 
487
491
  if interesting_managers and not self.pending_task_queue.empty():
488
- shuffled_managers = list(interesting_managers)
489
- random.shuffle(shuffled_managers)
492
+ shuffled_managers = self.manager_selector.sort_managers(self._ready_managers, interesting_managers)
490
493
 
491
494
  while shuffled_managers and not self.pending_task_queue.empty(): # cf. the if statement above...
492
495
  manager_id = shuffled_managers.pop()
@@ -519,7 +522,7 @@ class Interchange:
519
522
  else:
520
523
  logger.debug("either no interesting managers or no tasks, so skipping manager pass")
521
524
 
522
- def process_results_incoming(self, interesting_managers: Set[bytes], hub_channel: Optional[zmq.Socket]) -> None:
525
+ def process_results_incoming(self, interesting_managers: Set[bytes], monitoring_radio: Optional[MonitoringRadioSender]) -> None:
523
526
  # Receive any results and forward to client
524
527
  if self.results_incoming in self.socks and self.socks[self.results_incoming] == zmq.POLLIN:
525
528
  logger.debug("entering results_incoming section")
@@ -539,11 +542,11 @@ class Interchange:
539
542
  elif r['type'] == 'monitoring':
540
543
  # the monitoring code makes the assumption that no
541
544
  # monitoring messages will be received if monitoring
542
- # is not configured, and that hub_channel will only
545
+ # is not configured, and that monitoring_radio will only
543
546
  # be None when monitoring is not configurated.
544
- assert hub_channel is not None
547
+ assert monitoring_radio is not None
545
548
 
546
- hub_channel.send_pyobj(r['payload'])
549
+ monitoring_radio.send(r['payload'])
547
550
  elif r['type'] == 'heartbeat':
548
551
  logger.debug(f"Manager {manager_id!r} sent heartbeat via results connection")
549
552
  b_messages.append((p_message, r))
@@ -587,7 +590,7 @@ class Interchange:
587
590
  interesting_managers.add(manager_id)
588
591
  logger.debug("leaving results_incoming section")
589
592
 
590
- def expire_bad_managers(self, interesting_managers: Set[bytes], hub_channel: Optional[zmq.Socket]) -> None:
593
+ def expire_bad_managers(self, interesting_managers: Set[bytes], monitoring_radio: Optional[MonitoringRadioSender]) -> None:
591
594
  bad_managers = [(manager_id, m) for (manager_id, m) in self._ready_managers.items() if
592
595
  time.time() - m['last_heartbeat'] > self.heartbeat_threshold]
593
596
  for (manager_id, m) in bad_managers:
@@ -595,7 +598,7 @@ class Interchange:
595
598
  logger.warning(f"Too many heartbeats missed for manager {manager_id!r} - removing manager")
596
599
  if m['active']:
597
600
  m['active'] = False
598
- self._send_monitoring_info(hub_channel, m)
601
+ self._send_monitoring_info(monitoring_radio, m)
599
602
 
600
603
  logger.warning(f"Cancelling htex tasks {m['tasks']} on removed manager")
601
604
  for tid in m['tasks']:
@@ -0,0 +1,101 @@
1
+ Metadata-Version: 2.1
2
+ Name: parsl
3
+ Version: 2024.8.12
4
+ Summary: Simple data dependent workflows in Python
5
+ Home-page: https://github.com/Parsl/parsl
6
+ Download-URL: https://github.com/Parsl/parsl/archive/2024.08.12.tar.gz
7
+ Author: The Parsl Team
8
+ Author-email: parsl@googlegroups.com
9
+ License: Apache 2.0
10
+ Keywords: Workflows,Scientific computing
11
+ Classifier: Development Status :: 5 - Production/Stable
12
+ Classifier: Intended Audience :: Developers
13
+ Classifier: License :: OSI Approved :: Apache Software License
14
+ Classifier: Programming Language :: Python :: 3.8
15
+ Classifier: Programming Language :: Python :: 3.9
16
+ Classifier: Programming Language :: Python :: 3.10
17
+ Classifier: Programming Language :: Python :: 3.11
18
+ Classifier: Programming Language :: Python :: 3.12
19
+ Requires-Python: >=3.8.0
20
+ License-File: LICENSE
21
+ Requires-Dist: pyzmq>=17.1.2
22
+ Requires-Dist: typeguard!=3.*,<5,>=2.10
23
+ Requires-Dist: typing-extensions<5,>=4.6
24
+ Requires-Dist: globus-sdk
25
+ Requires-Dist: dill
26
+ Requires-Dist: tblib
27
+ Requires-Dist: requests
28
+ Requires-Dist: paramiko
29
+ Requires-Dist: psutil>=5.5.1
30
+ Requires-Dist: setproctitle
31
+ Requires-Dist: filelock<4,>=3.13
32
+ Provides-Extra: all
33
+ Requires-Dist: sqlalchemy<2,>=1.4; extra == "all"
34
+ Requires-Dist: pydot; extra == "all"
35
+ Requires-Dist: networkx<2.6,>=2.5; extra == "all"
36
+ Requires-Dist: Flask>=1.0.2; extra == "all"
37
+ Requires-Dist: flask-sqlalchemy; extra == "all"
38
+ Requires-Dist: pandas<2.2; extra == "all"
39
+ Requires-Dist: plotly; extra == "all"
40
+ Requires-Dist: python-daemon; extra == "all"
41
+ Requires-Dist: boto3; extra == "all"
42
+ Requires-Dist: kubernetes; extra == "all"
43
+ Requires-Dist: oauth-ssh>=0.9; extra == "all"
44
+ Requires-Dist: ipython<=8.6.0; extra == "all"
45
+ Requires-Dist: nbsphinx; extra == "all"
46
+ Requires-Dist: sphinx<7.2,>=7.1; extra == "all"
47
+ Requires-Dist: sphinx-rtd-theme; extra == "all"
48
+ Requires-Dist: google-auth; extra == "all"
49
+ Requires-Dist: google-api-python-client; extra == "all"
50
+ Requires-Dist: python-gssapi; extra == "all"
51
+ Requires-Dist: azure<=4; extra == "all"
52
+ Requires-Dist: msrestazure; extra == "all"
53
+ Requires-Dist: work-queue; extra == "all"
54
+ Requires-Dist: pyyaml; extra == "all"
55
+ Requires-Dist: cffi; extra == "all"
56
+ Requires-Dist: jsonschema; extra == "all"
57
+ Requires-Dist: proxystore; extra == "all"
58
+ Requires-Dist: radical.pilot==1.60; extra == "all"
59
+ Requires-Dist: radical.utils==1.60; extra == "all"
60
+ Provides-Extra: aws
61
+ Requires-Dist: boto3; extra == "aws"
62
+ Provides-Extra: azure
63
+ Requires-Dist: azure<=4; extra == "azure"
64
+ Requires-Dist: msrestazure; extra == "azure"
65
+ Provides-Extra: docs
66
+ Requires-Dist: ipython<=8.6.0; extra == "docs"
67
+ Requires-Dist: nbsphinx; extra == "docs"
68
+ Requires-Dist: sphinx<7.2,>=7.1; extra == "docs"
69
+ Requires-Dist: sphinx-rtd-theme; extra == "docs"
70
+ Provides-Extra: flux
71
+ Requires-Dist: pyyaml; extra == "flux"
72
+ Requires-Dist: cffi; extra == "flux"
73
+ Requires-Dist: jsonschema; extra == "flux"
74
+ Provides-Extra: google_cloud
75
+ Requires-Dist: google-auth; extra == "google-cloud"
76
+ Requires-Dist: google-api-python-client; extra == "google-cloud"
77
+ Provides-Extra: gssapi
78
+ Requires-Dist: python-gssapi; extra == "gssapi"
79
+ Provides-Extra: kubernetes
80
+ Requires-Dist: kubernetes; extra == "kubernetes"
81
+ Provides-Extra: monitoring
82
+ Requires-Dist: sqlalchemy<2,>=1.4; extra == "monitoring"
83
+ Provides-Extra: oauth_ssh
84
+ Requires-Dist: oauth-ssh>=0.9; extra == "oauth-ssh"
85
+ Provides-Extra: proxystore
86
+ Requires-Dist: proxystore; extra == "proxystore"
87
+ Provides-Extra: radical-pilot
88
+ Requires-Dist: radical.pilot==1.60; extra == "radical-pilot"
89
+ Requires-Dist: radical.utils==1.60; extra == "radical-pilot"
90
+ Provides-Extra: visualization
91
+ Requires-Dist: pydot; extra == "visualization"
92
+ Requires-Dist: networkx<2.6,>=2.5; extra == "visualization"
93
+ Requires-Dist: Flask>=1.0.2; extra == "visualization"
94
+ Requires-Dist: flask-sqlalchemy; extra == "visualization"
95
+ Requires-Dist: pandas<2.2; extra == "visualization"
96
+ Requires-Dist: plotly; extra == "visualization"
97
+ Requires-Dist: python-daemon; extra == "visualization"
98
+ Provides-Extra: workqueue
99
+ Requires-Dist: work-queue; extra == "workqueue"
100
+
101
+ Simple parallel workflows system for Python
@@ -8,7 +8,7 @@ parsl/multiprocessing.py,sha256=MyaEcEq-Qf860u7V98u-PZrPNdtzOZL_NW6EhIJnmfQ,1937
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=91FjQiTUY383ueAjkBAgE21My9nba6SP2a2SrbB1r1Q,11250
11
- parsl/version.py,sha256=1_lxZuThXb8Z-pTgQtbYaRM-j9czEj-Gcgyrj-lOHRA,131
11
+ parsl/version.py,sha256=zmI7FIN8AXv3b0Vpa7LbYgVzdHVLVu3NkfVqBNTu6aU,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
@@ -17,22 +17,21 @@ parsl/app/futures.py,sha256=XU1NwkoNVsxy3KF5y0Ihsla5hPbhhuSikZInfS7h7Uo,2910
17
17
  parsl/app/python.py,sha256=0hrz2BppVOwwNfh5hnoP70Yv56gSRkIoT-fP9XNb4v4,2331
18
18
  parsl/benchmark/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
19
19
  parsl/benchmark/perf.py,sha256=kKXefDozWXSJKSNA7qdfUgEoacA2-R9kSZcI2YvZ5uE,3096
20
- parsl/channels/__init__.py,sha256=DNFoy_e_vhNTABHVzo4nWilvBYe9W4Na6jj4vYf9El4,371
20
+ parsl/channels/__init__.py,sha256=OEZcuNBOxUwmzrHMZOuPvkw4kUxrbJDA99crDk61O90,131
21
21
  parsl/channels/base.py,sha256=bS43-Qv4VSxa83V6fJ54lNBL_eHCu-Ce7-aoy1C9vCc,4193
22
22
  parsl/channels/errors.py,sha256=Dp0FhtHpygn0IjX8nGurx-WrTJm9aw-Jjz3SSUT-jCc,3283
23
23
  parsl/channels/local/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
24
24
  parsl/channels/local/local.py,sha256=xqH4HnipUN95NgvyB1r33SiqgQKkARgRKmg0_HnumUk,5311
25
25
  parsl/channels/oauth_ssh/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
26
- parsl/channels/oauth_ssh/oauth_ssh.py,sha256=GrVOpJ6M6BwtGG4zOU4zakyphzuGY5M3suQ8PyjwyOA,3509
26
+ parsl/channels/oauth_ssh/oauth_ssh.py,sha256=2Hd5wEBVBhDQ9UHvO_iV4QhT6Na8GScy9O4HTM9Y5kA,3539
27
27
  parsl/channels/ssh/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
28
- parsl/channels/ssh/ssh.py,sha256=ga8LMZ9ryTZxbgiyljL5DwusYygbUEe-Frt3SBIMecM,10125
28
+ parsl/channels/ssh/ssh.py,sha256=TOxEDVCO0hbr1oru_KVGo0vrVEh_bgbqcXXx6EZHehw,10135
29
29
  parsl/channels/ssh_il/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
30
- parsl/channels/ssh_il/ssh_il.py,sha256=5XjotlA83UM4zGfnVriC9pE2NzaCT5hqvXZ9v4GG3pg,2410
30
+ parsl/channels/ssh_il/ssh_il.py,sha256=cAEAPfEoMfq_lkeBYfJAhrITci61IW_fkmffhUcIwqA,2440
31
31
  parsl/concurrent/__init__.py,sha256=TvIVceJYaJAsxedNBF3Vdo9lEQNHH_j3uxJv0zUjP7w,3288
32
32
  parsl/configs/ASPIRE1.py,sha256=eKnmz0QD3V522emtXMjS6Ppeooe5lzcBgCE6cxunbYY,1718
33
33
  parsl/configs/Azure.py,sha256=CJms3xWmdb-S3CksbHrPF2TfMxJC5I0faqUKCOzVg0k,1268
34
34
  parsl/configs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
35
- parsl/configs/ad_hoc.py,sha256=Gwnehd5_K6IzUSPECHnNBljyO-LQ9fyaBClHiT_myp8,1352
36
35
  parsl/configs/bridges.py,sha256=NsTvCiHZHbJj-BsOXOpgS4hCblCHW_lnMa_VMb3SIww,1523
37
36
  parsl/configs/cc_in2p3.py,sha256=T9PjUt2OFFv3w2uXFeKfIDmE7j_nllD3jVouvCmPrCc,785
38
37
  parsl/configs/ec2.py,sha256=5xtlZI4Fc558sYXdM4nQQvQDBNPdzhRRCO14F-8H7Y4,944
@@ -62,7 +61,7 @@ parsl/data_provider/staging.py,sha256=ZDZuuFg38pjUStegKPcvPsfGp3iMeReMzfU6DSwtJj
62
61
  parsl/data_provider/zip.py,sha256=S4kVuH9lxAegRURYbvIUR7EYYBOccyslaqyCrVWUBhw,4497
63
62
  parsl/dataflow/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
64
63
  parsl/dataflow/dependency_resolvers.py,sha256=Om8Dgh7a0ZwgXAc6TlhxLSzvxXHDlNNV1aBNiD3JTNY,3325
65
- parsl/dataflow/dflow.py,sha256=rdDWhhsPhCkCqxMIhagBKOZMQKDXsDxp7hnTgY_LPqI,68256
64
+ parsl/dataflow/dflow.py,sha256=2RV4MmQ3y6iwOT7aJaeWMsVPJ6tFT03V0YAcUbxogpk,68250
66
65
  parsl/dataflow/errors.py,sha256=9SxVhIJY_53FQx8x4OU8UA8nd7lvUbDllH7KfMXpYaY,2177
67
66
  parsl/dataflow/futures.py,sha256=08LuP-HFiHBIZmeKCjlsazw_WpQ5fwevrU2_WbidkYw,6080
68
67
  parsl/dataflow/memoization.py,sha256=l9uw1Bu50GucBF70M5relpGKFkE4dIM9T3R1KrxW0v0,9583
@@ -70,9 +69,9 @@ parsl/dataflow/rundirs.py,sha256=7aUg1cb0LLTocQxOdBzwtn7a8bIgpdMD5rjZV55UwaQ,115
70
69
  parsl/dataflow/states.py,sha256=hV6mfv-y4A6xrujeQglcomnfEs7y3Xm2g6JFwC6dvgQ,2612
71
70
  parsl/dataflow/taskrecord.py,sha256=-FuujdZQ1y5GSc-PJ91QKGT-Kp0lrg70MFDoxpbWI1Q,3113
72
71
  parsl/executors/__init__.py,sha256=Cg8e-F2NUaBD8A9crDAXKCSdoBEwQVIdgm4FlXd-wvk,476
73
- parsl/executors/base.py,sha256=BECTvBfVRDATyhBmMdcH75xoFhx-LO3rQYawVhaUJ6M,5144
72
+ parsl/executors/base.py,sha256=5A59mCXPjYNCep9JgfvIjBdZvGV-1mNVHklr-ZIEojg,5200
74
73
  parsl/executors/errors.py,sha256=xVswxgi7vmJcUMCeYDAPK8sQT2kHFFROVoOr0dnmcWE,2098
75
- parsl/executors/status_handling.py,sha256=BPv51pJbscV-HdOWgRN5JRPPyOm1b4m3qBbz7pTQjpc,14662
74
+ parsl/executors/status_handling.py,sha256=XtFVifRwnLU2Lq1E4XsyPwUzMXZCOMecWL-jRCqpDyk,15269
76
75
  parsl/executors/threads.py,sha256=hJt1LzxphqX4fe_9R9Cf1MU0lepWTU_eJe8O665B0Xo,3352
77
76
  parsl/executors/flux/__init__.py,sha256=P9grTTeRPXfqXurFhlSS7XhmE6tTbnCnyQ1f9b-oYHE,136
78
77
  parsl/executors/flux/execute_parsl_task.py,sha256=gRN7F4HhdrKQ-bvn4wXrquBzFOp_9WF88hMIeUaRg5I,1553
@@ -80,9 +79,10 @@ parsl/executors/flux/executor.py,sha256=8_xakLUu5zNJAHL0LbeTCFEWqWzRK1eE-3ep4GII
80
79
  parsl/executors/flux/flux_instance_manager.py,sha256=5T3Rp7ZM-mlT0Pf0Gxgs5_YmnaPrSF9ec7zvRfLfYJw,2129
81
80
  parsl/executors/high_throughput/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
82
81
  parsl/executors/high_throughput/errors.py,sha256=Sak8e8UpiEcXefUjMHbhyXc4Rn7kJtOoh7L8wreBQdk,1638
83
- parsl/executors/high_throughput/executor.py,sha256=fY-OuzStEgyM-ao11debyhbB3pRk4frEmXdcmBHWsvQ,37834
84
- parsl/executors/high_throughput/interchange.py,sha256=vmsUEAgqshi_K5n9oqb-bOGIt9BOFW32Ei_3Ur1C8EE,30663
82
+ parsl/executors/high_throughput/executor.py,sha256=rMYu1PP-nXS8Oh9wu8Z-diNbI8J2fmuNqb3wvoyuMIc,38221
83
+ parsl/executors/high_throughput/interchange.py,sha256=upaJht6YnqvJqVF1Ub7GEyRFDtw1v19d0JmCWNXsi6k,31094
85
84
  parsl/executors/high_throughput/manager_record.py,sha256=yn3L8TUJFkgm2lX1x0SeS9mkvJowC0s2VIMCFiU7ThM,455
85
+ parsl/executors/high_throughput/manager_selector.py,sha256=uRaEtcbDO2vXf8vjEcm7bfZVdeUlSPTRc3G4oFRO29M,820
86
86
  parsl/executors/high_throughput/monitoring_info.py,sha256=HC0drp6nlXQpAop5PTUKNjdXMgtZVvrBL0JzZJebPP4,298
87
87
  parsl/executors/high_throughput/mpi_executor.py,sha256=V07t1GOzFhcwdlZGuYUPqc1NarSr-vUbsNzbK4Cj0m8,3882
88
88
  parsl/executors/high_throughput/mpi_prefix_composer.py,sha256=hah_IznfFqk-rzuHWmg6aiF_saiDRrpW-aSo4kH9Nso,4854
@@ -97,7 +97,7 @@ parsl/executors/radical/rpex_worker.py,sha256=qli6i6ejKubTSv3lAE3YiW8RlkHrfl4Jhr
97
97
  parsl/executors/taskvine/__init__.py,sha256=9rwp3M8B0YyEhZMLO0RHaNw7u1nc01WHbXLqnBTanu0,293
98
98
  parsl/executors/taskvine/errors.py,sha256=euIYkSslrNSI85kyi2s0xzOaO9ik4c1fYHstMIeiBJk,652
99
99
  parsl/executors/taskvine/exec_parsl_function.py,sha256=ftGdJU78lKPPkphSHlEi4rj164mhuMHJjghVqfgeXKk,7085
100
- parsl/executors/taskvine/executor.py,sha256=XsUzFWgFWbxf06jDLMAKiXUF-F1_VLheZ5jhAwSphZk,30977
100
+ parsl/executors/taskvine/executor.py,sha256=yODov_9LNyuxJga2Ki-fp1WEHwDcwNsLIBaqP8bAvfw,31056
101
101
  parsl/executors/taskvine/factory.py,sha256=rWpEoFphLzqO3HEYyDEbQa14iyvgkdZg7hLZuaY39gQ,2638
102
102
  parsl/executors/taskvine/factory_config.py,sha256=AbE2fN2snrF5ITYrrS4DnGn2XkJHUFr_17DYHDHIwq0,3693
103
103
  parsl/executors/taskvine/manager.py,sha256=fwRSgYWpbsnr5jXlzvX0sQjOqryqn_77K_svJJ1HJ2U,25631
@@ -106,7 +106,7 @@ parsl/executors/taskvine/utils.py,sha256=iSrIogeiauL3UNy_9tiZp1cBSNn6fIJkMYQRVi1
106
106
  parsl/executors/workqueue/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
107
107
  parsl/executors/workqueue/errors.py,sha256=XO2naYhAsHHyiOBH6hpObg3mPNDmvMoFqErsj0-v7jc,541
108
108
  parsl/executors/workqueue/exec_parsl_function.py,sha256=RUkJ4JSJAjr7YyRZ58zhMdg8cR5dVV9odUl3AuzNf3k,7802
109
- parsl/executors/workqueue/executor.py,sha256=YaY_U5DxXU2NbswmlrcJ2BtXvSbV0ElM9ZlQzP_F_BU,49803
109
+ parsl/executors/workqueue/executor.py,sha256=aS864cpAvWQeW6hDqOtX_aUa1YnXsPcemuiVMq51pys,49840
110
110
  parsl/executors/workqueue/parsl_coprocess.py,sha256=cF1UmTgVLoey6QzBcbYgEiEsRidSaFfuO54f1HFw_EM,5737
111
111
  parsl/executors/workqueue/parsl_coprocess_stub.py,sha256=_bJmpPIgL42qM6bVzeEKt1Mn1trSP41rtJguXxPGfHI,735
112
112
  parsl/jobs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -120,12 +120,13 @@ parsl/launchers/base.py,sha256=CblcvPTJiu-MNLWaRtFe29SZQ0BpTOlaY8CGcHdlHIE,538
120
120
  parsl/launchers/errors.py,sha256=8YMV_CHpBNVa4eXkGE4x5DaFQlZkDCRCHmBktYcY6TA,467
121
121
  parsl/launchers/launchers.py,sha256=VB--fiVv_IQne3DydTMSdGUY0o0g69puAs-Hd3mJ2vo,15464
122
122
  parsl/monitoring/__init__.py,sha256=0ywNz6i0lM1xo_7_BIxhETDGeVd2C_0wwD7qgeaMR4c,83
123
- parsl/monitoring/db_manager.py,sha256=qPdW_MINycSn6MxxFk2s_R-t8g1cbJhxncVR5mDgeGs,37011
123
+ parsl/monitoring/db_manager.py,sha256=XAhnxX56ZupYL0HfHuQDiwmGsahXVRc-A4VV8tfwths,36931
124
+ parsl/monitoring/errors.py,sha256=D6jpYzEzp0d6FmVKGqhvjAxr4ztZfJX2s-aXemH9bBU,148
124
125
  parsl/monitoring/message_type.py,sha256=Khn88afNxcOIciKiCK4GLnn90I5BlRTiOL3zK-P07yQ,401
125
- parsl/monitoring/monitoring.py,sha256=ggffHhtgh96lSmryvjjjaHg7oV54Ci-kz4wWOPJviKU,13548
126
- parsl/monitoring/radios.py,sha256=VaVZEPDkLsJ3Jp2CFo5kQ94mxiqpN9xltKl8lnKksiQ,5908
127
- parsl/monitoring/remote.py,sha256=qH1N3My8F473CHKxFrA2CsaL0Uege26tQi9-KrWQrr4,13771
128
- parsl/monitoring/router.py,sha256=l1LBT1hxCWQ2mxCR-PtxwYJ905In61E4pPJB2K2J7kM,9554
126
+ parsl/monitoring/monitoring.py,sha256=FhZ4qC74mTvH0n4z9jNHhomIASf0V8DqnRuZQEJGGP8,13524
127
+ parsl/monitoring/radios.py,sha256=cHdpBOW1ITYvFnOgYjziuZOauq8p7mlSBOvcbIP78mg,6437
128
+ parsl/monitoring/remote.py,sha256=avIWMvejN0LeIXpt_RCXJxGLbsXhapUab2rS5Tmjca4,13739
129
+ parsl/monitoring/router.py,sha256=ezuE5tTBa-Ry0hSHtUiWacxnP37VkLUC1vuZaIBRNBA,11224
129
130
  parsl/monitoring/types.py,sha256=_WGizCTgQVOkJ2dvNfsvHpYBj21Ky3bJsmyIskIx10I,631
130
131
  parsl/monitoring/queries/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
131
132
  parsl/monitoring/queries/pandas.py,sha256=0Z2r0rjTKCemf0eaDkF1irvVHn5g7KC5SYETvQPRxwU,2232
@@ -150,12 +151,12 @@ parsl/monitoring/visualization/templates/resource_usage.html,sha256=__QEaAPdO8kz
150
151
  parsl/monitoring/visualization/templates/task.html,sha256=omDwp7zFXHVtuGsUCXcB7xLAsAW0Vrjd1b-wFZj9y70,2803
151
152
  parsl/monitoring/visualization/templates/workflow.html,sha256=QCSHAPHK_2C3gNcZ3NmChLFG6xuchZEjT_iLQ3wwXmk,1871
152
153
  parsl/monitoring/visualization/templates/workflows_summary.html,sha256=7brKKNsxcT4z-l10BKJlgTxQtGL033ZS5jEDdSmsPEE,891
153
- parsl/providers/__init__.py,sha256=Qg42K_r9tiwtUA4YK74L1IPg9ffsH-PoefnbF-gBfNo,1185
154
+ parsl/providers/__init__.py,sha256=fvmVlu4aHw796K-fuUqxCHdK8KhrQviMARSmUQl1XXs,1077
154
155
  parsl/providers/base.py,sha256=u8oGlAaDfh15EgOJNJF1aZUy0Ou-UW6UY0b7ZI7Ecjo,5702
155
156
  parsl/providers/cluster_provider.py,sha256=o75wJHHyZkecjEBhGGBCMUQ1JlsecAhAKxX_Qd2pyg8,4668
156
157
  parsl/providers/errors.py,sha256=_CbCmpguzcA81SC5dPLkDZs1AShzacGKttNhuzNBeiQ,2270
157
158
  parsl/providers/ad_hoc/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
158
- parsl/providers/ad_hoc/ad_hoc.py,sha256=jADPUEp_zVj2mijlDYdPD9Zkqj2l0uspJxVRxQ-9xvk,8302
159
+ parsl/providers/ad_hoc/ad_hoc.py,sha256=NPZRJnVYT7IB2TCLThofcB7g0WZqgT_N0hDs3K86zhE,8466
159
160
  parsl/providers/aws/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
160
161
  parsl/providers/aws/aws.py,sha256=nS899gamCAhiIY-4zwaEToa7Om73PrAz4dvX5YSEkUQ,28985
161
162
  parsl/providers/aws/template.py,sha256=N7OEpp7YP6CK5RUtLOwFnks7AE2UG5hHXddh8FF0BFs,347
@@ -207,7 +208,6 @@ parsl/tests/test_summary.py,sha256=x1RfWCFLzHjBw2ukwoRZPW1LFCKiwDmxx86ES-6yGRA,5
207
208
  parsl/tests/test_thread_parallelism.py,sha256=TVNeQ1NkUhaf3YbbzUSH-ozFFdX_GbX-5ygommjVxvc,1653
208
209
  parsl/tests/utils.py,sha256=YqUlBTj2UoAFVKVdLKh-1Y6MQM_ZSHPJOQ4GfQvFXyk,110
209
210
  parsl/tests/configs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
210
- parsl/tests/configs/ad_hoc_cluster_htex.py,sha256=twCY2ppy1M7EpPkwVC-8oboaiSwqNBrQV0noFBWPMJ0,1301
211
211
  parsl/tests/configs/azure_single_node.py,sha256=iX99_MCPkInOzByB5QRYYBSbWDhFaTcA7CkJk9DreuU,1729
212
212
  parsl/tests/configs/bluewaters.py,sha256=SyCQ99Iih6sYjJVLj5C-AzUqff8vowP113ZC8JHDc24,1370
213
213
  parsl/tests/configs/bridges.py,sha256=WqMa340ZEXRmwgY7oe6QjJnUMO3Y3vAfKngg0XNyVRI,1602
@@ -218,12 +218,11 @@ parsl/tests/configs/ec2_single_node.py,sha256=rK9AfMf4C84CXMhS5nhgHA_dNG2An7Yiq2
218
218
  parsl/tests/configs/ec2_spot.py,sha256=NKDCKgKxYNOHGVLBl2DFfiUwkR6xQnyhNb_E04TBs28,1253
219
219
  parsl/tests/configs/flux_local.py,sha256=xliKQfB5FFpfNHWYEHoA8FKOTVHFCXVhWNuKQ5VJNTk,182
220
220
  parsl/tests/configs/frontera.py,sha256=VXaRcvsi9ZjqJHi71BbKXSJBuQXdhCzPxXKW7H3LRBI,1567
221
- parsl/tests/configs/htex_ad_hoc_cluster.py,sha256=Nr5ZVs4kVvX2UbRk8j9VW6xYGf9SR43SvodkU8RVWEQ,944
222
221
  parsl/tests/configs/htex_local.py,sha256=o7Lxz1nErHpLNcH7vEEy9KyCNiEf6r3gpCrBmdQbh94,719
223
222
  parsl/tests/configs/htex_local_alternate.py,sha256=CnEfKbt1nnGYwKVICA2tmyqDNH0GP9pFLao2bNXGRHI,2510
224
223
  parsl/tests/configs/htex_local_intask_staging.py,sha256=E7uZD_AIAbxavkw4VrVXlGG7k42YJZv2qluAO-W0VvI,886
225
224
  parsl/tests/configs/htex_local_rsync_staging.py,sha256=cqTRcHLjqYnOL07Lb8ecTzQuzP-dWDpWdKhgtTwo-fU,940
226
- parsl/tests/configs/local_adhoc.py,sha256=a4veilmLBG7UaBvhOaEXY9euYOFWgg9ZqWgG1786Jsw,475
225
+ parsl/tests/configs/local_adhoc.py,sha256=jlyDwwIm0uVuyDgKZCb3wa3k0IaqcYT0ErMhu_0N26s,509
227
226
  parsl/tests/configs/local_radical.py,sha256=C70I6ssfaaHEY1MMCC77izpp6sdANALH-P2mDR2msN0,417
228
227
  parsl/tests/configs/local_radical_mpi.py,sha256=5OabeXXJPE0fyiA1AlGcQYoPRjQRk-HNA-xPLTFyAr4,532
229
228
  parsl/tests/configs/local_threads.py,sha256=oEnQSlom_JMLFX9_Ln49JAfOP3nSMbw8gTaDJo_NYfo,202
@@ -241,7 +240,6 @@ parsl/tests/configs/nscc_singapore.py,sha256=ECENZcBuCjkY6OWZstEMhfMrmjRmjCc7ELd
241
240
  parsl/tests/configs/osg_htex.py,sha256=x-C_r7Kpwvqroc4Ay1Yaya9K6_j7IU1ywqPegBU7HKI,1371
242
241
  parsl/tests/configs/petrelkube.py,sha256=uUxrZrD_cF-_t6ytlRA_MUtw8RQbpW0CmNRbw3mWs1o,1699
243
242
  parsl/tests/configs/summit.py,sha256=0LbuTVmc8nl2eGiqAayhV0RCx0pg5kUpYhz9LvTFhDo,1378
244
- parsl/tests/configs/swan_htex.py,sha256=WEICoOrYWJKlium7R52TRHJ6Env_KVhKE2kbgu2ZJD8,1501
245
243
  parsl/tests/configs/taskvine_ex.py,sha256=Nsovxtb59q6ta2opGrl7ufWcavYQtzSPrscLmaLYkUU,472
246
244
  parsl/tests/configs/theta.py,sha256=bkwcFcZYSkJOfLdcPHiAN2BRRGz3nLTaPylvdm3dcJ8,1298
247
245
  parsl/tests/configs/user_opts.py,sha256=fNO1OxISFPP7IyJ_iwf8dQ6EagVr2StXtOWmGnA9MeI,6265
@@ -253,22 +251,15 @@ parsl/tests/integration/test_apps/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeR
253
251
  parsl/tests/integration/test_channels/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
254
252
  parsl/tests/integration/test_channels/test_channels.py,sha256=Nv_1ljrJ5Miqe4U5q9XPBqc0YZbJC90TIsH0p3203Gs,323
255
253
  parsl/tests/integration/test_channels/test_local_channel.py,sha256=_j9z4LqdfawEQRlae6EHpMtrhMPMapbIlJwoHEibAuE,1009
256
- parsl/tests/integration/test_channels/test_scp_1.py,sha256=K7KWTeiZULBBydbvfmBzvRm7KM7nlkZn_O2-v5D5yY4,1014
257
- parsl/tests/integration/test_channels/test_ssh_1.py,sha256=5HQehVteKCPXFt4V3W2YXgGvDm0sKP2MmJC0TCnJUbs,933
258
- parsl/tests/integration/test_channels/test_ssh_errors.py,sha256=VKaNZAbXr7uv8EhG7FIVm8Veq2WnMJ2Jel7A3t5v_dQ,1279
259
- parsl/tests/integration/test_channels/test_ssh_file_transport.py,sha256=9cBi7CPzM-4NxsCW3VfmRWgOvOb-mk8hpH187clScvc,904
260
- parsl/tests/integration/test_channels/test_ssh_interactive.py,sha256=voUAR21RZD0c9fPDfAN9PZiiZw58qk_hxC92LL10VSA,568
261
254
  parsl/tests/integration/test_stress/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
262
255
  parsl/tests/integration/test_stress/test_python_simple.py,sha256=QZMhi6E0OmMsKi3QkHJZdNpALSrWshrLcKsstLANUWE,1007
263
256
  parsl/tests/integration/test_stress/test_python_threads.py,sha256=-4dW-g69cu6uhSvk5HiH0fI6ceckQNqUXZGvNK6QGq4,897
264
257
  parsl/tests/manual_tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
265
258
  parsl/tests/manual_tests/htex_local.py,sha256=6bbnCPy7t_sJUrvDXiLB97joP8UWGjAdEs4aRP6PkFQ,820
266
- parsl/tests/manual_tests/test_ad_hoc_htex.py,sha256=CPBzPd21GwKlz5jbHCipPepc3v0ZFiTdQCR8pAwlxkQ,1255
267
259
  parsl/tests/manual_tests/test_basic.py,sha256=3uCS9BqaZmKTNtNfJSsJIg2exlTAdC0Sdc1w9hY9Tvc,4023
268
260
  parsl/tests/manual_tests/test_fan_in_out_htex_remote.py,sha256=j9GkGwV7sP8ytIz4L7usuVacvBfFyIm-lq9F74KO85o,2422
269
261
  parsl/tests/manual_tests/test_log_filter.py,sha256=jwKclAVuESdlGK_giBuHDkY6ryX6rZB7q01lXT5K0XU,1872
270
262
  parsl/tests/manual_tests/test_memory_limits.py,sha256=XGV_YmIeiGMt1HWYS0Zxo-XkVoKsvHhl11_U3MTg1KI,2677
271
- parsl/tests/manual_tests/test_oauth_ssh.py,sha256=v7msnSS5ywrWl7oqB_gR72oU2owrpzxaQ4vBt9C8pxI,337
272
263
  parsl/tests/manual_tests/test_regression_220.py,sha256=Jo2puWt1W0r1rJfaJFgd2ZPgR3i6uOXzrLRcfYDZWDo,931
273
264
  parsl/tests/manual_tests/test_udp_simple.py,sha256=VyEbE3G5pcRjzbdUbQlL0BHiilfOsNsbbLOJghU7n84,1037
274
265
  parsl/tests/manual_tests/test_worker_count.py,sha256=Cv8nAWMXAREiiGEBUr_8JyI87ffp8JGAyDqVXzcjX_0,2072
@@ -343,17 +334,18 @@ parsl/tests/test_htex/test_command_client_timeout.py,sha256=5tBViUhPT1ejnDDztTcE
343
334
  parsl/tests/test_htex/test_connected_blocks.py,sha256=gaXZSr__pIaLvKY6rF-4r1p_4dO5V28gtxHLT-psEFg,1640
344
335
  parsl/tests/test_htex/test_cpu_affinity_explicit.py,sha256=DVHrRCskDbJIrfB5YSi3ZSbfR4WzijA46aZfZzjNcrU,1382
345
336
  parsl/tests/test_htex/test_disconnected_blocks.py,sha256=3V1Ol9gMS6knjLTgIjB5GrunRSp4ANsJ_2vAvpyMR6c,1858
337
+ parsl/tests/test_htex/test_disconnected_blocks_failing_provider.py,sha256=eOdipRpKMOkWAXB3UtY1UjqTiwfNs_csNLve8vllG_M,2040
346
338
  parsl/tests/test_htex/test_drain.py,sha256=Z2Z5-3NfLL9tMgJh4JkVKLZZDl3Z2gDAbEFHDSGdItw,2288
347
- parsl/tests/test_htex/test_htex.py,sha256=qnJ1LjCC2c75BOxZ4CRA7pEX2RrFKG-fWIuPiW6w9k4,5005
339
+ parsl/tests/test_htex/test_htex.py,sha256=5ylQvWgmSLP3lOdoHxqK9wkvAgfgeJx6gihKPkN8XfU,5320
348
340
  parsl/tests/test_htex/test_manager_failure.py,sha256=N-obuSZ8f7XA_XcddoN2LWKSVtpKUZvTHb7BFelS3iQ,1143
349
341
  parsl/tests/test_htex/test_managers_command.py,sha256=Y-eUjtBzwW9erCYdph9bOesbkUvX8QUPqXt27DCgVS8,951
350
342
  parsl/tests/test_htex/test_missing_worker.py,sha256=gyp5i7_t-JHyJGtz_eXZKKBY5w8oqLOIxO6cJgGJMtQ,745
351
343
  parsl/tests/test_htex/test_multiple_disconnected_blocks.py,sha256=Axn8us43dA722O4PWdqxCJM5f_vinZqjFT1WAEvC_ZM,1995
352
344
  parsl/tests/test_htex/test_worker_failure.py,sha256=Uz-RHI-LK78FMjXUvrUFmo4iYfmpDVBUcBxxRb3UG9M,603
353
- parsl/tests/test_htex/test_zmq_binding.py,sha256=Bealo3kRwiu76uwj68bvXH4JNVYUsFtarNKt80f3a04,3757
345
+ parsl/tests/test_htex/test_zmq_binding.py,sha256=Bq1HHuMxBE_AcaP1VZ-RqE4euCHO__Du05b2UZ5H1RA,3950
354
346
  parsl/tests/test_monitoring/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
355
347
  parsl/tests/test_monitoring/test_app_names.py,sha256=ayyxySGWpKSe9dDw2UeJo1dicxjpALRuLsJfprZV4Eg,2174
356
- parsl/tests/test_monitoring/test_basic.py,sha256=lGyHEJt_rokawv_XeAx-bxV84IlZUFR4KI0PQAiLsFg,3714
348
+ parsl/tests/test_monitoring/test_basic.py,sha256=nQERwVH56CjrKc_YSsMxH5UziJDqN2357Vhyd0brbRU,4177
357
349
  parsl/tests/test_monitoring/test_db_locks.py,sha256=3s3c1xhKo230ZZIJ3f1Ca4U7LcEdXnanOGVXQyNlk2U,2895
358
350
  parsl/tests/test_monitoring/test_fuzz_zmq.py,sha256=--3-pQUvXXbkr8v_BEJoPvVvNly1oXvrD2nJh6yl_0M,3436
359
351
  parsl/tests/test_monitoring/test_htex_init_blocks_vs_monitoring.py,sha256=_WjymTgxWvZZwQpJQ3L2gmEt5VUkTss0hOT153AssdQ,2746
@@ -367,11 +359,11 @@ parsl/tests/test_mpi_apps/test_mpi_mode_disabled.py,sha256=Wg3TZE1eF5U3XVGtsCCtt
367
359
  parsl/tests/test_mpi_apps/test_mpi_mode_enabled.py,sha256=pV-htWmPNyY7XKN4Qo-twLmH-qreCgFlYwokgZbTS_g,5304
368
360
  parsl/tests/test_mpi_apps/test_mpi_prefix.py,sha256=yJslZvYK3JeL9UgxMwF9DDPR9QD4zJLGVjubD0F-utc,1950
369
361
  parsl/tests/test_mpi_apps/test_mpi_scheduler.py,sha256=YdV8A-m67DHk9wxgNpj69wwGEKrFGL20KAC1TzLke3c,6332
370
- parsl/tests/test_mpi_apps/test_mpiex.py,sha256=DcvfDZT_WnwSzL5IF71JPbV_wEI_hZl_WrZNBC-QCPE,2032
362
+ parsl/tests/test_mpi_apps/test_mpiex.py,sha256=U4Djvzsf_oKgtxL6HXBxxEzrHiYVw2dQBpDgbGlMffU,2052
371
363
  parsl/tests/test_mpi_apps/test_resource_spec.py,sha256=A7NwNT4LalCSOiHws1ALrrWy8Mn1IItpv9olhnRVjs0,3987
372
364
  parsl/tests/test_providers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
373
365
  parsl/tests/test_providers/test_cobalt_deprecation_warning.py,sha256=UN2W6xJxuLx2euPqArORKFEU2VXez9_PYqq-0rZHanQ,391
374
- parsl/tests/test_providers/test_local_provider.py,sha256=XCAy64oM3IZ6k0RYBIr6s-D2LL7gr6_xXZ_3Pv1D0gM,7076
366
+ parsl/tests/test_providers/test_local_provider.py,sha256=R96E1eWgHVkvOQ1Au9wj-gfdWKAqGc-qlygFuxpGFQ8,7160
375
367
  parsl/tests/test_providers/test_pbspro_template.py,sha256=-bi1vags9yyNfpBxtjTqFjzMIg1VVPyf2M958UcXWmA,855
376
368
  parsl/tests/test_providers/test_slurm_instantiate.py,sha256=eW3pEZRIzZO1-eKFrBc7N5uoN5otwghgbqut74Kyqoc,500
377
369
  parsl/tests/test_providers/test_slurm_template.py,sha256=pBEeimO-vGbMmC1QT7BP7s5BH6fFeqaWnI4f6tWPFEo,901
@@ -467,13 +459,13 @@ parsl/usage_tracking/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hS
467
459
  parsl/usage_tracking/api.py,sha256=iaCY58Dc5J4UM7_dJzEEs871P1p1HdxBMtNGyVdzc9g,1821
468
460
  parsl/usage_tracking/levels.py,sha256=xbfzYEsd55KiZJ-mzNgPebvOH4rRHum04hROzEf41tU,291
469
461
  parsl/usage_tracking/usage.py,sha256=qNEJ7nPimqd3Y7OWFLdYmNwJ6XDKlyfV_fTzasxsQw8,8690
470
- parsl-2024.7.29.data/scripts/exec_parsl_function.py,sha256=RUkJ4JSJAjr7YyRZ58zhMdg8cR5dVV9odUl3AuzNf3k,7802
471
- parsl-2024.7.29.data/scripts/interchange.py,sha256=q3V1mqr0BC_CzsNfebTKFD5tyE0birXUvZh-bk05vLQ,30650
472
- parsl-2024.7.29.data/scripts/parsl_coprocess.py,sha256=zrVjEqQvFOHxsLufPi00xzMONagjVwLZbavPM7bbjK4,5722
473
- parsl-2024.7.29.data/scripts/process_worker_pool.py,sha256=78QKnV5KbY_vcteC6k60gpDE4wEk6hsciet_qzs9QoU,43061
474
- parsl-2024.7.29.dist-info/LICENSE,sha256=tAkwu8-AdEyGxGoSvJ2gVmQdcicWw3j1ZZueVV74M-E,11357
475
- parsl-2024.7.29.dist-info/METADATA,sha256=DN5bT4CBKxmmsnscGT_y61gVnmzLEGRZDg95HFbxD54,4124
476
- parsl-2024.7.29.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
477
- parsl-2024.7.29.dist-info/entry_points.txt,sha256=XqnsWDYoEcLbsMcpnYGKLEnSBmaIe1YoM5YsBdJG2tI,176
478
- parsl-2024.7.29.dist-info/top_level.txt,sha256=PIheYoUFQtF2icLsgOykgU-Cjuwr2Oi6On2jo5RYgRM,6
479
- parsl-2024.7.29.dist-info/RECORD,,
462
+ parsl-2024.8.12.data/scripts/exec_parsl_function.py,sha256=RUkJ4JSJAjr7YyRZ58zhMdg8cR5dVV9odUl3AuzNf3k,7802
463
+ parsl-2024.8.12.data/scripts/interchange.py,sha256=Gl9h3_MN4Ux2FJZxd2ObfTSZ5T1INYQDhU_bYFezbkE,31081
464
+ parsl-2024.8.12.data/scripts/parsl_coprocess.py,sha256=zrVjEqQvFOHxsLufPi00xzMONagjVwLZbavPM7bbjK4,5722
465
+ parsl-2024.8.12.data/scripts/process_worker_pool.py,sha256=78QKnV5KbY_vcteC6k60gpDE4wEk6hsciet_qzs9QoU,43061
466
+ parsl-2024.8.12.dist-info/LICENSE,sha256=tAkwu8-AdEyGxGoSvJ2gVmQdcicWw3j1ZZueVV74M-E,11357
467
+ parsl-2024.8.12.dist-info/METADATA,sha256=7Jds7wt0Rauv9RhkD1Qqdp3G7xI0YRSK4QHDpooLdjQ,4045
468
+ parsl-2024.8.12.dist-info/WHEEL,sha256=eOLhNAGa2EW3wWl_TU484h7q1UNgy0JXjjoqKoxAAQc,92
469
+ parsl-2024.8.12.dist-info/entry_points.txt,sha256=XqnsWDYoEcLbsMcpnYGKLEnSBmaIe1YoM5YsBdJG2tI,176
470
+ parsl-2024.8.12.dist-info/top_level.txt,sha256=PIheYoUFQtF2icLsgOykgU-Cjuwr2Oi6On2jo5RYgRM,6
471
+ parsl-2024.8.12.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: bdist_wheel (0.43.0)
2
+ Generator: bdist_wheel (0.44.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
parsl/configs/ad_hoc.py DELETED
@@ -1,38 +0,0 @@
1
- from typing import Any, Dict
2
-
3
- from parsl.channels import SSHChannel
4
- from parsl.config import Config
5
- from parsl.executors import HighThroughputExecutor
6
- from parsl.providers import AdHocProvider
7
- from parsl.usage_tracking.levels import LEVEL_1
8
-
9
- user_opts: Dict[str, Dict[str, Any]]
10
- user_opts = {'adhoc':
11
- {'username': 'YOUR_USERNAME',
12
- 'script_dir': 'YOUR_SCRIPT_DIR',
13
- 'remote_hostnames': ['REMOTE_HOST_URL_1', 'REMOTE_HOST_URL_2']
14
- }
15
- }
16
-
17
-
18
- config = Config(
19
- executors=[
20
- HighThroughputExecutor(
21
- label='remote_htex',
22
- max_workers_per_node=2,
23
- worker_logdir_root=user_opts['adhoc']['script_dir'],
24
- provider=AdHocProvider(
25
- # Command to be run before starting a worker, such as:
26
- # 'module load Anaconda; source activate parsl_env'.
27
- worker_init='',
28
- channels=[SSHChannel(hostname=m,
29
- username=user_opts['adhoc']['username'],
30
- script_dir=user_opts['adhoc']['script_dir'],
31
- ) for m in user_opts['adhoc']['remote_hostnames']]
32
- )
33
- )
34
- ],
35
- # AdHoc Clusters should not be setup with scaling strategy.
36
- strategy='none',
37
- usage_tracking=LEVEL_1,
38
- )
@@ -1,35 +0,0 @@
1
- from typing import Any, Dict
2
-
3
- from parsl.channels import SSHChannel
4
- from parsl.config import Config
5
- from parsl.executors import HighThroughputExecutor
6
- from parsl.providers import AdHocProvider
7
-
8
- user_opts = {'adhoc':
9
- {'username': 'YOUR_USERNAME',
10
- 'script_dir': 'YOUR_SCRIPT_DIR',
11
- 'remote_hostnames': ['REMOTE_HOST_URL_1', 'REMOTE_HOST_URL_2']
12
- }
13
- } # type: Dict[str, Dict[str, Any]]
14
-
15
- config = Config(
16
- executors=[
17
- HighThroughputExecutor(
18
- label='remote_htex',
19
- max_workers_per_node=2,
20
- worker_logdir_root=user_opts['adhoc']['script_dir'],
21
- encrypted=True,
22
- provider=AdHocProvider(
23
- # Command to be run before starting a worker, such as:
24
- # 'module load Anaconda; source activate parsl_env'.
25
- worker_init='',
26
- channels=[SSHChannel(hostname=m,
27
- username=user_opts['adhoc']['username'],
28
- script_dir=user_opts['adhoc']['script_dir'],
29
- ) for m in user_opts['adhoc']['remote_hostnames']]
30
- )
31
- )
32
- ],
33
- # AdHoc Clusters should not be setup with scaling strategy.
34
- strategy='none',
35
- )