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.
- parsl/addresses.py +3 -1
- parsl/config.py +4 -0
- parsl/dataflow/dflow.py +14 -7
- parsl/dataflow/taskrecord.py +3 -1
- parsl/executors/high_throughput/executor.py +34 -10
- parsl/executors/high_throughput/interchange.py +43 -10
- parsl/executors/high_throughput/manager_record.py +1 -0
- parsl/executors/high_throughput/process_worker_pool.py +48 -7
- parsl/executors/taskvine/executor.py +6 -3
- parsl/executors/taskvine/manager.py +1 -0
- parsl/executors/taskvine/manager_config.py +3 -4
- parsl/jobs/job_status_poller.py +4 -3
- parsl/jobs/strategy.py +2 -1
- parsl/launchers/launchers.py +6 -6
- parsl/log_utils.py +8 -4
- parsl/monitoring/db_manager.py +29 -7
- parsl/monitoring/monitoring.py +15 -54
- parsl/monitoring/remote.py +29 -0
- parsl/monitoring/visualization/models.py +7 -0
- parsl/monitoring/visualization/plots/default/workflow_plots.py +3 -0
- parsl/monitoring/visualization/views.py +2 -1
- parsl/providers/cluster_provider.py +1 -3
- parsl/providers/slurm/slurm.py +13 -2
- parsl/tests/configs/user_opts.py +5 -2
- parsl/tests/test_htex/test_drain.py +78 -0
- parsl/tests/test_monitoring/test_app_names.py +86 -0
- parsl/tests/test_scaling/test_scale_down_htex_auto_scale.py +3 -11
- parsl/usage_tracking/usage.py +5 -9
- parsl/utils.py +2 -2
- parsl/version.py +1 -1
- {parsl-2024.3.4.data → parsl-2024.3.18.data}/scripts/process_worker_pool.py +48 -7
- {parsl-2024.3.4.dist-info → parsl-2024.3.18.dist-info}/METADATA +2 -2
- {parsl-2024.3.4.dist-info → parsl-2024.3.18.dist-info}/RECORD +39 -38
- {parsl-2024.3.4.dist-info → parsl-2024.3.18.dist-info}/WHEEL +1 -1
- parsl/configs/bluewaters.py +0 -28
- {parsl-2024.3.4.data → parsl-2024.3.18.data}/scripts/exec_parsl_function.py +0 -0
- {parsl-2024.3.4.data → parsl-2024.3.18.data}/scripts/parsl_coprocess.py +0 -0
- {parsl-2024.3.4.dist-info → parsl-2024.3.18.dist-info}/LICENSE +0 -0
- {parsl-2024.3.4.dist-info → parsl-2024.3.18.dist-info}/entry_points.txt +0 -0
- {parsl-2024.3.4.dist-info → parsl-2024.3.18.dist-info}/top_level.txt +0 -0
parsl/usage_tracking/usage.py
CHANGED
@@ -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
|
180
|
-
|
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
@@ -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',
|
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("
|
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=
|
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.
|
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.
|
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=
|
3
|
-
parsl/config.py,sha256=
|
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=
|
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=
|
11
|
-
parsl/version.py,sha256=
|
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=
|
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=
|
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=
|
83
|
-
parsl/executors/high_throughput/interchange.py,sha256=
|
84
|
-
parsl/executors/high_throughput/manager_record.py,sha256=
|
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=
|
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=
|
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=
|
103
|
-
parsl/executors/taskvine/manager_config.py,sha256=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
440
|
-
parsl-2024.3.
|
441
|
-
parsl-2024.3.
|
442
|
-
parsl-2024.3.
|
443
|
-
parsl-2024.3.
|
444
|
-
parsl-2024.3.
|
445
|
-
parsl-2024.3.
|
446
|
-
parsl-2024.3.
|
447
|
-
parsl-2024.3.
|
448
|
-
parsl-2024.3.
|
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,,
|
parsl/configs/bluewaters.py
DELETED
@@ -1,28 +0,0 @@
|
|
1
|
-
from parsl.config import Config
|
2
|
-
from parsl.executors import HighThroughputExecutor
|
3
|
-
from parsl.launchers import AprunLauncher
|
4
|
-
from parsl.providers import TorqueProvider
|
5
|
-
|
6
|
-
|
7
|
-
config = Config(
|
8
|
-
executors=[
|
9
|
-
HighThroughputExecutor(
|
10
|
-
label="bw_htex",
|
11
|
-
cores_per_worker=1,
|
12
|
-
worker_debug=False,
|
13
|
-
provider=TorqueProvider(
|
14
|
-
queue='normal',
|
15
|
-
launcher=AprunLauncher(overrides="-b -- bwpy-environ --"),
|
16
|
-
scheduler_options='', # string to prepend to #SBATCH blocks in the submit script to the scheduler
|
17
|
-
worker_init='', # command to run before starting a worker, such as 'source activate env'
|
18
|
-
init_blocks=1,
|
19
|
-
max_blocks=1,
|
20
|
-
min_blocks=1,
|
21
|
-
nodes_per_block=2,
|
22
|
-
walltime='00:10:00'
|
23
|
-
),
|
24
|
-
)
|
25
|
-
|
26
|
-
],
|
27
|
-
|
28
|
-
)
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|