parsl 2025.9.8__py3-none-any.whl → 2025.9.22__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.
Potentially problematic release.
This version of parsl might be problematic. Click here for more details.
- parsl/curvezmq.py +0 -16
- parsl/executors/execute_task.py +2 -8
- parsl/executors/flux/executor.py +3 -5
- parsl/executors/high_throughput/executor.py +10 -4
- parsl/executors/high_throughput/interchange.py +14 -4
- parsl/executors/high_throughput/mpi_resource_management.py +1 -7
- parsl/executors/high_throughput/process_worker_pool.py +5 -1
- parsl/executors/high_throughput/zmq_pipes.py +29 -43
- parsl/executors/radical/executor.py +2 -6
- parsl/executors/radical/rpex_worker.py +2 -2
- parsl/monitoring/monitoring.py +2 -2
- parsl/multiprocessing.py +0 -49
- parsl/serialize/__init__.py +6 -9
- parsl/serialize/facade.py +0 -32
- parsl/tests/test_curvezmq.py +0 -42
- parsl/tests/test_execute_task.py +2 -11
- parsl/tests/test_htex/test_command_concurrency_regression_1321.py +54 -0
- parsl/tests/test_htex/test_interchange_exit_bad_registration.py +2 -1
- parsl/tests/test_htex/test_priority_queue.py +8 -2
- parsl/tests/test_htex/test_zmq_binding.py +2 -1
- parsl/tests/test_mpi_apps/test_mpi_scheduler.py +18 -43
- parsl/version.py +1 -1
- {parsl-2025.9.8.data → parsl-2025.9.22.data}/scripts/interchange.py +14 -4
- {parsl-2025.9.8.data → parsl-2025.9.22.data}/scripts/process_worker_pool.py +5 -1
- {parsl-2025.9.8.dist-info → parsl-2025.9.22.dist-info}/METADATA +2 -2
- {parsl-2025.9.8.dist-info → parsl-2025.9.22.dist-info}/RECORD +32 -38
- parsl/tests/site_tests/test_provider.py +0 -88
- parsl/tests/site_tests/test_site.py +0 -70
- parsl/tests/test_aalst_patterns.py +0 -474
- parsl/tests/test_docs/test_workflow2.py +0 -42
- parsl/tests/test_error_handling/test_rand_fail.py +0 -171
- parsl/tests/test_regression/test_854.py +0 -62
- parsl/tests/test_serialization/test_pack_resource_spec.py +0 -23
- {parsl-2025.9.8.data → parsl-2025.9.22.data}/scripts/exec_parsl_function.py +0 -0
- {parsl-2025.9.8.data → parsl-2025.9.22.data}/scripts/parsl_coprocess.py +0 -0
- {parsl-2025.9.8.dist-info → parsl-2025.9.22.dist-info}/LICENSE +0 -0
- {parsl-2025.9.8.dist-info → parsl-2025.9.22.dist-info}/WHEEL +0 -0
- {parsl-2025.9.8.dist-info → parsl-2025.9.22.dist-info}/entry_points.txt +0 -0
- {parsl-2025.9.8.dist-info → parsl-2025.9.22.dist-info}/top_level.txt +0 -0
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
from random import randint
|
|
2
|
+
|
|
1
3
|
import pytest
|
|
2
4
|
|
|
3
5
|
import parsl
|
|
@@ -40,12 +42,16 @@ def test_priority_queue():
|
|
|
40
42
|
futures = {}
|
|
41
43
|
|
|
42
44
|
# Submit tasks with mixed priorities
|
|
43
|
-
#
|
|
44
|
-
|
|
45
|
+
# Test fallback behavior with a guaranteed-unsorted priorities
|
|
46
|
+
priorities = [randint(2, 9) for _ in range(randint(1, 10))]
|
|
47
|
+
priorities.insert(0, 10)
|
|
48
|
+
priorities.extend((1, 10, 1))
|
|
49
|
+
for i, priority in enumerate(priorities):
|
|
45
50
|
spec = {'priority': priority}
|
|
46
51
|
futures[(priority, i)] = fake_task(parsl_resource_specification=spec)
|
|
47
52
|
|
|
48
53
|
provider.max_blocks = 1
|
|
54
|
+
htex.scale_out_facade(1) # don't wait for the JSP to catch up
|
|
49
55
|
|
|
50
56
|
# Wait for completion
|
|
51
57
|
results = {
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import logging
|
|
2
1
|
import os
|
|
3
2
|
import pickle
|
|
4
3
|
from unittest import mock
|
|
@@ -10,7 +9,9 @@ from parsl.executors.high_throughput.mpi_resource_management import (
|
|
|
10
9
|
TaskScheduler,
|
|
11
10
|
)
|
|
12
11
|
from parsl.multiprocessing import SpawnContext
|
|
13
|
-
from parsl.serialize import
|
|
12
|
+
from parsl.serialize import pack_apply_message
|
|
13
|
+
|
|
14
|
+
mock_task_buffer = pack_apply_message("func", "args", "kwargs")
|
|
14
15
|
|
|
15
16
|
|
|
16
17
|
@pytest.fixture(autouse=True)
|
|
@@ -42,12 +43,8 @@ def test_MPISched_put_task():
|
|
|
42
43
|
assert len(scheduler.available_nodes) == 8
|
|
43
44
|
assert scheduler._free_node_counter.value == 8
|
|
44
45
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
"kwargs",
|
|
48
|
-
resource_specification={"num_nodes": 2,
|
|
49
|
-
"ranks_per_node": 2})
|
|
50
|
-
task_package = {"task_id": 1, "buffer": mock_task_buffer}
|
|
46
|
+
res_spec = {"num_nodes": 2, "ranks_per_node": 2}
|
|
47
|
+
task_package = {"task_id": 1, "buffer": mock_task_buffer, "resource_spec": res_spec}
|
|
51
48
|
scheduler.put_task(task_package)
|
|
52
49
|
|
|
53
50
|
assert scheduler._free_node_counter.value == 6
|
|
@@ -82,21 +79,17 @@ def test_MPISched_roundtrip():
|
|
|
82
79
|
assert scheduler.available_nodes
|
|
83
80
|
assert len(scheduler.available_nodes) == 8
|
|
84
81
|
|
|
85
|
-
for
|
|
82
|
+
for trip in range(1, 9):
|
|
86
83
|
assert scheduler._free_node_counter.value == 8
|
|
87
84
|
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
"kwargs",
|
|
91
|
-
resource_specification={"num_nodes": round,
|
|
92
|
-
"ranks_per_node": 2})
|
|
93
|
-
task_package = {"task_id": round, "buffer": mock_task_buffer}
|
|
85
|
+
res_spec = {"num_nodes": trip, "ranks_per_node": 2}
|
|
86
|
+
task_package = {"task_id": trip, "buffer": mock_task_buffer, "resource_spec": res_spec}
|
|
94
87
|
scheduler.put_task(task_package)
|
|
95
88
|
|
|
96
|
-
assert scheduler._free_node_counter.value == 8 -
|
|
89
|
+
assert scheduler._free_node_counter.value == 8 - trip
|
|
97
90
|
|
|
98
91
|
# Pop in a mock result
|
|
99
|
-
result_pkl = pickle.dumps({"task_id":
|
|
92
|
+
result_pkl = pickle.dumps({"task_id": trip, "type": "result", "buffer": "RESULT BUF"})
|
|
100
93
|
result_q.put(result_pkl)
|
|
101
94
|
|
|
102
95
|
got_result = scheduler.get_result(True, 1)
|
|
@@ -114,27 +107,15 @@ def test_MPISched_contention():
|
|
|
114
107
|
|
|
115
108
|
assert scheduler._free_node_counter.value == 8
|
|
116
109
|
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
"kwargs",
|
|
120
|
-
resource_specification={
|
|
121
|
-
"num_nodes": 8,
|
|
122
|
-
"ranks_per_node": 2
|
|
123
|
-
})
|
|
124
|
-
task_package = {"task_id": 1, "buffer": mock_task_buffer}
|
|
110
|
+
rspec_1 = {"num_nodes": 8, "ranks_per_node": 2}
|
|
111
|
+
task_package = {"task_id": 1, "buffer": mock_task_buffer, "resource_spec": rspec_1}
|
|
125
112
|
scheduler.put_task(task_package)
|
|
126
113
|
|
|
127
114
|
assert scheduler._free_node_counter.value == 0
|
|
128
115
|
assert scheduler._backlog_queue.empty()
|
|
129
116
|
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
"kwargs",
|
|
133
|
-
resource_specification={
|
|
134
|
-
"num_nodes": 8,
|
|
135
|
-
"ranks_per_node": 2
|
|
136
|
-
})
|
|
137
|
-
task_package = {"task_id": 2, "buffer": mock_task_buffer}
|
|
117
|
+
rspec_2 = {"num_nodes": 8, "ranks_per_node": 2}
|
|
118
|
+
task_package = {"task_id": 2, "buffer": mock_task_buffer, "resource_spec": rspec_2}
|
|
138
119
|
scheduler.put_task(task_package)
|
|
139
120
|
|
|
140
121
|
# Second task should now be in the backlog_queue
|
|
@@ -143,8 +124,7 @@ def test_MPISched_contention():
|
|
|
143
124
|
# Confirm that the first task is available and has all 8 nodes provisioned
|
|
144
125
|
task_on_worker_side = task_q.get()
|
|
145
126
|
assert task_on_worker_side['task_id'] == 1
|
|
146
|
-
|
|
147
|
-
assert len(resource_spec['MPI_NODELIST'].split(',')) == 8
|
|
127
|
+
assert len(rspec_1["MPI_NODELIST"].split(",")) == 8
|
|
148
128
|
assert task_q.empty() # Confirm that task 2 is not yet scheduled
|
|
149
129
|
|
|
150
130
|
# Simulate worker returning result and the scheduler picking up result
|
|
@@ -159,8 +139,7 @@ def test_MPISched_contention():
|
|
|
159
139
|
# Pop in a mock result
|
|
160
140
|
task_on_worker_side = task_q.get()
|
|
161
141
|
assert task_on_worker_side['task_id'] == 2
|
|
162
|
-
|
|
163
|
-
assert len(resource_spec['MPI_NODELIST'].split(',')) == 8
|
|
142
|
+
assert len(rspec_2["MPI_NODELIST"].split(",")) == 8
|
|
164
143
|
|
|
165
144
|
|
|
166
145
|
@pytest.mark.local
|
|
@@ -178,11 +157,7 @@ def test_hashable_backlog_queue():
|
|
|
178
157
|
assert scheduler._free_node_counter.value == 8
|
|
179
158
|
|
|
180
159
|
for i in range(3):
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
"num_nodes": 8,
|
|
184
|
-
"ranks_per_node": 2
|
|
185
|
-
})
|
|
186
|
-
task_package = {"task_id": i, "buffer": mock_task_buffer}
|
|
160
|
+
res_spec = {"num_nodes": 8, "ranks_per_node": 2}
|
|
161
|
+
task_package = {"task_id": i, "buffer": mock_task_buffer, "resource_spec": res_spec}
|
|
187
162
|
scheduler.put_task(task_package)
|
|
188
163
|
assert scheduler._backlog_queue.qsize() == 2, "Expected 2 backlogged tasks"
|
parsl/version.py
CHANGED
|
@@ -23,7 +23,6 @@ from parsl.monitoring.radios.base import MonitoringRadioSender
|
|
|
23
23
|
from parsl.monitoring.radios.zmq import ZMQRadioSender
|
|
24
24
|
from parsl.process_loggers import wrap_with_logs
|
|
25
25
|
from parsl.serialize import serialize as serialize_object
|
|
26
|
-
from parsl.utils import setproctitle
|
|
27
26
|
from parsl.version import VERSION as PARSL_VERSION
|
|
28
27
|
|
|
29
28
|
PKL_HEARTBEAT_CODE = pickle.dumps((2 ** 32) - 1)
|
|
@@ -56,6 +55,7 @@ class Interchange:
|
|
|
56
55
|
cert_dir: Optional[str],
|
|
57
56
|
manager_selector: ManagerSelector,
|
|
58
57
|
run_id: str,
|
|
58
|
+
_check_python_mismatch: bool,
|
|
59
59
|
) -> None:
|
|
60
60
|
"""
|
|
61
61
|
Parameters
|
|
@@ -99,6 +99,11 @@ class Interchange:
|
|
|
99
99
|
|
|
100
100
|
cert_dir : str | None
|
|
101
101
|
Path to the certificate directory.
|
|
102
|
+
|
|
103
|
+
_check_python_mismatch : bool
|
|
104
|
+
If True, the interchange and worker managers must run the same version of
|
|
105
|
+
Python. Running different versions can cause inter-process communication
|
|
106
|
+
errors, so proceed with caution.
|
|
102
107
|
"""
|
|
103
108
|
self.cert_dir = cert_dir
|
|
104
109
|
self.logdir = logdir
|
|
@@ -126,6 +131,7 @@ class Interchange:
|
|
|
126
131
|
logger.info("Connected to client")
|
|
127
132
|
|
|
128
133
|
self.run_id = run_id
|
|
134
|
+
self._check_python_mismatch = _check_python_mismatch
|
|
129
135
|
|
|
130
136
|
self.hub_address = hub_address
|
|
131
137
|
self.hub_zmq_port = hub_zmq_port
|
|
@@ -213,7 +219,7 @@ class Interchange:
|
|
|
213
219
|
|
|
214
220
|
reply: Any # the type of reply depends on the command_req received (aka this needs dependent types...)
|
|
215
221
|
|
|
216
|
-
if self.
|
|
222
|
+
if self.socks.get(self.command_channel) == zmq.POLLIN:
|
|
217
223
|
logger.debug("entering command_server section")
|
|
218
224
|
|
|
219
225
|
command_req = self.command_channel.recv_pyobj()
|
|
@@ -321,7 +327,7 @@ class Interchange:
|
|
|
321
327
|
"""Process incoming task message(s).
|
|
322
328
|
"""
|
|
323
329
|
|
|
324
|
-
if self.
|
|
330
|
+
if self.socks.get(self.task_incoming) == zmq.POLLIN:
|
|
325
331
|
logger.debug("start task_incoming section")
|
|
326
332
|
msg = self.task_incoming.recv_pyobj()
|
|
327
333
|
|
|
@@ -396,7 +402,9 @@ class Interchange:
|
|
|
396
402
|
logger.info(f'Registration info for manager {manager_id!r}: {meta}')
|
|
397
403
|
self._send_monitoring_info(monitoring_radio, new_rec)
|
|
398
404
|
|
|
399
|
-
|
|
405
|
+
python_mismatch: bool = ix_minor_py != mgr_minor_py
|
|
406
|
+
parsl_mismatch: bool = ix_parsl_v != mgr_parsl_v
|
|
407
|
+
if parsl_mismatch or (self._check_python_mismatch and python_mismatch):
|
|
400
408
|
kill_event.set()
|
|
401
409
|
vm_exc = VersionMismatch(
|
|
402
410
|
f"py.v={ix_minor_py} parsl.v={ix_parsl_v}",
|
|
@@ -618,6 +626,8 @@ def start_file_logger(filename: str, level: int = logging.DEBUG, format_string:
|
|
|
618
626
|
|
|
619
627
|
|
|
620
628
|
if __name__ == "__main__":
|
|
629
|
+
from parsl.utils import setproctitle
|
|
630
|
+
|
|
621
631
|
setproctitle("parsl: HTEX interchange")
|
|
622
632
|
|
|
623
633
|
config = pickle.load(sys.stdin.buffer)
|
|
@@ -603,6 +603,10 @@ def update_resource_spec_env_vars(mpi_launcher: str, resource_spec: Dict, node_i
|
|
|
603
603
|
|
|
604
604
|
|
|
605
605
|
def _init_mpi_env(mpi_launcher: str, resource_spec: Dict):
|
|
606
|
+
for varname in resource_spec:
|
|
607
|
+
envname = "PARSL_" + str(varname).upper()
|
|
608
|
+
os.environ[envname] = str(resource_spec[varname])
|
|
609
|
+
|
|
606
610
|
node_list = resource_spec.get("MPI_NODELIST")
|
|
607
611
|
if node_list is None:
|
|
608
612
|
return
|
|
@@ -753,8 +757,8 @@ def worker(
|
|
|
753
757
|
worker_enqueued = True
|
|
754
758
|
|
|
755
759
|
try:
|
|
756
|
-
# The worker will receive {'task_id':<tid>, 'buffer':<buf>}
|
|
757
760
|
req = task_queue.get(timeout=task_queue_timeout)
|
|
761
|
+
# req is {'task_id':<tid>, 'buffer':<buf>, 'resource_spec':<dict>}
|
|
758
762
|
except queue.Empty:
|
|
759
763
|
continue
|
|
760
764
|
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: parsl
|
|
3
|
-
Version: 2025.9.
|
|
3
|
+
Version: 2025.9.22
|
|
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.09.
|
|
6
|
+
Download-URL: https://github.com/Parsl/parsl/archive/2025.09.22.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=QaS0vxlxGVp2UYEIGcYYiUMOZJKSrQOXFR2X_KozL88,1641
|
|
2
2
|
parsl/addresses.py,sha256=z5GnIWdbzz4klRiMZtX8XmRT7OP8dJYvAk8RIKD2kzI,5290
|
|
3
3
|
parsl/config.py,sha256=p5HQoxLj5aMagUAYfngcXG2kw0s6SJoc6u7vH2sVhPU,9635
|
|
4
|
-
parsl/curvezmq.py,sha256=
|
|
4
|
+
parsl/curvezmq.py,sha256=QQh-Wp7CxvKxExIkjRkwt_UB5ooglkkuOgjEc7SF0fE,6582
|
|
5
5
|
parsl/errors.py,sha256=SzINzQFZDBDbj9l-DPQznD0TbGkNhHIRAPkcBCogf_A,1019
|
|
6
6
|
parsl/log_utils.py,sha256=7L3uzvK9ew11pj5D25us-Hs12QTL_jwXNs1LL8dZhOI,3559
|
|
7
|
-
parsl/multiprocessing.py,sha256=
|
|
7
|
+
parsl/multiprocessing.py,sha256=xqieTLko3DrHykCqqSHQszMwd8ORYllrgz6Qc_PsHCE,2112
|
|
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=smVYTusMoYUTD5N9OxTW5bh6o2iioh0NnfjrBAj8zYk,14452
|
|
11
|
-
parsl/version.py,sha256=
|
|
11
|
+
parsl/version.py,sha256=1FmTAxb_oLz19QvMrCDIghwk5d3IAI0plHgiPluzCgI,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
|
|
@@ -65,31 +65,31 @@ parsl/dataflow/taskrecord.py,sha256=qIW7T6hn9dYTuNPdUura3HQwwUpUJACwPP5REm5COf4,
|
|
|
65
65
|
parsl/executors/__init__.py,sha256=PEuXYrnVqwlaz_nt82s9D_YNaVsX7ET29DeIZRUR8hw,577
|
|
66
66
|
parsl/executors/base.py,sha256=Qlc7Qa-jbfGpQcGB29JUFXCdhcSN63bjGubEcbDk270,4948
|
|
67
67
|
parsl/executors/errors.py,sha256=ZxL3nK5samPos8Xixo_jpRtPIiRJfZ5D397_qaXj2g0,2515
|
|
68
|
-
parsl/executors/execute_task.py,sha256=
|
|
68
|
+
parsl/executors/execute_task.py,sha256=Kx6V4Qe_Y2mtiKiUYAlGFseceKgzBdoXfuVsOouk2U4,892
|
|
69
69
|
parsl/executors/globus_compute.py,sha256=p59iBrv2BvYUAZ3YZSpOrm_Wpai592ueiJm3zFS7gvY,5304
|
|
70
70
|
parsl/executors/status_handling.py,sha256=aRlp0zNrkoaEQEcVoSsk6YNazzHtw0mPYy0GIaEh3qw,15744
|
|
71
71
|
parsl/executors/threads.py,sha256=lX9VuaMDBg_dqAObKfeaZlYCY4-ti33U-YMWOhWFGTY,4141
|
|
72
72
|
parsl/executors/flux/__init__.py,sha256=P9grTTeRPXfqXurFhlSS7XhmE6tTbnCnyQ1f9b-oYHE,136
|
|
73
73
|
parsl/executors/flux/execute_parsl_task.py,sha256=zHP5M7ILGiwnoalZ8WsfVVdZM7uP4iQo2ThVh4crxpM,1530
|
|
74
|
-
parsl/executors/flux/executor.py,sha256=
|
|
74
|
+
parsl/executors/flux/executor.py,sha256=UhW8R_QVYIuafrX4xOIokzl1z7p4KjFBUzser3bAxOg,16981
|
|
75
75
|
parsl/executors/flux/flux_instance_manager.py,sha256=5T3Rp7ZM-mlT0Pf0Gxgs5_YmnaPrSF9ec7zvRfLfYJw,2129
|
|
76
76
|
parsl/executors/high_throughput/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
77
77
|
parsl/executors/high_throughput/errors.py,sha256=k2XuvvFdUfNs2foHFnxmS-BToRMfdXpYEa4EF3ELKq4,1554
|
|
78
|
-
parsl/executors/high_throughput/executor.py,sha256=
|
|
79
|
-
parsl/executors/high_throughput/interchange.py,sha256=
|
|
78
|
+
parsl/executors/high_throughput/executor.py,sha256=fAjGPJM4_EQbIosIvNpXzKWTLqGVDNWB635l-6hkBow,40240
|
|
79
|
+
parsl/executors/high_throughput/interchange.py,sha256=PcalTRzNRVW5B5B6CVR4IoGqqrdhOSzzIcHoQawRH3A,26089
|
|
80
80
|
parsl/executors/high_throughput/manager_record.py,sha256=ZMsqFxvreGLRXAw3N-JnODDa9Qfizw2tMmcBhm4lco4,490
|
|
81
81
|
parsl/executors/high_throughput/manager_selector.py,sha256=UKcUE6v0tO7PDMTThpKSKxVpOpOUilxDL7UbNgpZCxo,2116
|
|
82
82
|
parsl/executors/high_throughput/monitoring_info.py,sha256=HC0drp6nlXQpAop5PTUKNjdXMgtZVvrBL0JzZJebPP4,298
|
|
83
83
|
parsl/executors/high_throughput/mpi_executor.py,sha256=P8n81Y9t5cw-YuNFgkrGtc4oG75ntBJDonUIfhkp_5I,5223
|
|
84
84
|
parsl/executors/high_throughput/mpi_prefix_composer.py,sha256=DmpKugANNa1bdYlqQBLHkrFc15fJpefPPhW9hkAlh1s,4308
|
|
85
|
-
parsl/executors/high_throughput/mpi_resource_management.py,sha256=
|
|
85
|
+
parsl/executors/high_throughput/mpi_resource_management.py,sha256=SeFtvvS-8asTGaukM5YW85m_8FdIGod0I5Vi0fNcXZg,7796
|
|
86
86
|
parsl/executors/high_throughput/probe.py,sha256=QlBFwSSxMmtH-Aa2JEvCzQLddsbWZluMUxq5ypLR51E,3831
|
|
87
|
-
parsl/executors/high_throughput/process_worker_pool.py,sha256=
|
|
88
|
-
parsl/executors/high_throughput/zmq_pipes.py,sha256=
|
|
87
|
+
parsl/executors/high_throughput/process_worker_pool.py,sha256=KLNE4kswtV0OzoHWCgg00Bs8zPtWixJGBqAbDPPfrWY,40688
|
|
88
|
+
parsl/executors/high_throughput/zmq_pipes.py,sha256=fANpmyvBetp0_b-qsI59yqBW8ank-PDNqThuQ3JeVl4,8183
|
|
89
89
|
parsl/executors/radical/__init__.py,sha256=CKbtV2numw5QvgIBq1htMUrt9TqDCIC2zifyf2svTNU,186
|
|
90
|
-
parsl/executors/radical/executor.py,sha256=
|
|
90
|
+
parsl/executors/radical/executor.py,sha256=eb7zgakpFBvGVlQ2NgxQlfjaql_mQQrYqqJJqbFxEno,22643
|
|
91
91
|
parsl/executors/radical/rpex_resources.py,sha256=Q7-0u3K447LBCe2y7mVcdw6jqWI7SdPXxCKhkr6FoRQ,5139
|
|
92
|
-
parsl/executors/radical/rpex_worker.py,sha256=
|
|
92
|
+
parsl/executors/radical/rpex_worker.py,sha256=vl807EucEH4YgKgQ-OAP1cZPDqRwKjte3WxH2CERbo8,1796
|
|
93
93
|
parsl/executors/taskvine/__init__.py,sha256=9rwp3M8B0YyEhZMLO0RHaNw7u1nc01WHbXLqnBTanu0,293
|
|
94
94
|
parsl/executors/taskvine/errors.py,sha256=euIYkSslrNSI85kyi2s0xzOaO9ik4c1fYHstMIeiBJk,652
|
|
95
95
|
parsl/executors/taskvine/exec_parsl_function.py,sha256=ftGdJU78lKPPkphSHlEi4rj164mhuMHJjghVqfgeXKk,7085
|
|
@@ -119,7 +119,7 @@ parsl/monitoring/__init__.py,sha256=0ywNz6i0lM1xo_7_BIxhETDGeVd2C_0wwD7qgeaMR4c,
|
|
|
119
119
|
parsl/monitoring/db_manager.py,sha256=VZrDS2xr6HaYxLN9ueLbFJiWucrzjOyIc75tf8FeJ9c,33207
|
|
120
120
|
parsl/monitoring/errors.py,sha256=VQNIMoo5Ro8GlJ-Ad-6q-YA0y6sTc-IibSdNXZC-GuU,306
|
|
121
121
|
parsl/monitoring/message_type.py,sha256=Khn88afNxcOIciKiCK4GLnn90I5BlRTiOL3zK-P07yQ,401
|
|
122
|
-
parsl/monitoring/monitoring.py,sha256
|
|
122
|
+
parsl/monitoring/monitoring.py,sha256=-kr4cq1AGiXHHfi0XUJ-NPk0D_rz-fS-T-PD8DHt7Wo,6602
|
|
123
123
|
parsl/monitoring/remote.py,sha256=Kki5sTnZwHUIFMJh99w11vQrKxiHGO7ElBydwAIctbY,12636
|
|
124
124
|
parsl/monitoring/types.py,sha256=oOCrzv-ab-_rv4pb8o58Sdb8G_RGp1aZriRbdf9zBEk,339
|
|
125
125
|
parsl/monitoring/queries/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -190,19 +190,18 @@ parsl/providers/slurm/template.py,sha256=KpgBEFMc1ps-38jdrk13xUGx9TCivu-iF90jgQD
|
|
|
190
190
|
parsl/providers/torque/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
191
191
|
parsl/providers/torque/template.py,sha256=4qfc2gmlEhRCAD7erFDOs4prJQ43I8s4E8DSUSVQx3A,358
|
|
192
192
|
parsl/providers/torque/torque.py,sha256=QMmhJtCfrF7HQW4rJWAZ6PaQ3WWFVWJS0QSkFH0wwdo,8918
|
|
193
|
-
parsl/serialize/__init__.py,sha256
|
|
193
|
+
parsl/serialize/__init__.py,sha256=mD67d2zn0VgOxyNR3xuPnq6Go8UZ_XPIsC1hu3qDfos,226
|
|
194
194
|
parsl/serialize/base.py,sha256=5GyJRr3PQohp5Zv9YQUEyes61mfUK7wTctTaXITYpSQ,1082
|
|
195
195
|
parsl/serialize/concretes.py,sha256=JPWmltkm-XH2S22ugXCYWYmxwukCUEXWYKzPkKXJO60,1911
|
|
196
196
|
parsl/serialize/errors.py,sha256=TmTjGI4jf8p2hH454jpp_CPbhxwPXcj5MdOMEmF6so4,1066
|
|
197
|
-
parsl/serialize/facade.py,sha256=
|
|
197
|
+
parsl/serialize/facade.py,sha256=D33Sia7rnJ2_ZdSBPsWBa0XDWVHOwqMe0DO4_sdXsoY,5596
|
|
198
198
|
parsl/serialize/proxystore.py,sha256=o-ha9QAvVhbN8y9S1itk3W0O75eyHYZw2AvB2xu5_Lg,1624
|
|
199
199
|
parsl/tests/__init__.py,sha256=VTtJzOzz_x6fWNh8IOnsgFqVbdiJShi2AZH21mcmID4,204
|
|
200
200
|
parsl/tests/callables_helper.py,sha256=ceP1YYsNtrZgKT6MAIvpgdccEjQ_CpFEOnZBGHKGOx0,30
|
|
201
201
|
parsl/tests/conftest.py,sha256=PqXpj1AxpPQrcKXJBQ83WIF8TIzZ4-YhAjKQPahE1Tw,15618
|
|
202
|
-
parsl/tests/test_aalst_patterns.py,sha256=lNIxb7nIgh1yX7hR2fr_ck_mxYJxx8ASKK9zHUVqPno,9614
|
|
203
202
|
parsl/tests/test_callables.py,sha256=97vrIF1_hfDGd81FM1bhR6FemZMWFcALrH6pVHMTCt8,1974
|
|
204
|
-
parsl/tests/test_curvezmq.py,sha256=
|
|
205
|
-
parsl/tests/test_execute_task.py,sha256=
|
|
203
|
+
parsl/tests/test_curvezmq.py,sha256=CmLQforq2WPYFC5OsOGh5a9ujiEFKygktZi1mpOn3XU,11239
|
|
204
|
+
parsl/tests/test_execute_task.py,sha256=IzvuDLLckrRzghjvvcsUTNXFKskNsNQeKy1Bx-NWf2k,457
|
|
206
205
|
parsl/tests/test_flux.py,sha256=TxkVPjksl1usdE9Y6y2FYhdOOmYFTlbEv_V9WnvF41A,5098
|
|
207
206
|
parsl/tests/test_summary.py,sha256=x1RfWCFLzHjBw2ukwoRZPW1LFCKiwDmxx86ES-6yGRA,552
|
|
208
207
|
parsl/tests/test_thread_parallelism.py,sha256=TVNeQ1NkUhaf3YbbzUSH-ozFFdX_GbX-5ygommjVxvc,1653
|
|
@@ -258,8 +257,6 @@ parsl/tests/manual_tests/test_regression_220.py,sha256=Jo2puWt1W0r1rJfaJFgd2ZPgR
|
|
|
258
257
|
parsl/tests/manual_tests/test_worker_count.py,sha256=Cv8nAWMXAREiiGEBUr_8JyI87ffp8JGAyDqVXzcjX_0,2072
|
|
259
258
|
parsl/tests/site_tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
260
259
|
parsl/tests/site_tests/site_config_selector.py,sha256=cpToBNdvHZPOxYfiFpGVuydSMlmxfeo27N3VEjRFLgw,1815
|
|
261
|
-
parsl/tests/site_tests/test_provider.py,sha256=o9pUn_qzQnUSnuh-OQGBec_dNrmOVTD79-i27p_K-N8,2696
|
|
262
|
-
parsl/tests/site_tests/test_site.py,sha256=kykFelM7Z78EF0rmS2NRaN-qhXBE9vaSflUGtps-h60,1946
|
|
263
260
|
parsl/tests/sites/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
264
261
|
parsl/tests/sites/test_affinity.py,sha256=CCfYxSkpoznREGV2-K2As4YbsMY7bCiYqRMZkUp-zO0,1500
|
|
265
262
|
parsl/tests/sites/test_concurrent.py,sha256=ybHOnIsRyYs2tFPggv2ivRVoqH8Ts4PTEvb4IN3Obv8,1219
|
|
@@ -295,12 +292,10 @@ parsl/tests/test_docs/test_from_slides.py,sha256=KcULKUfmKEkSMzSL1HcyEhAF_OoDScu
|
|
|
295
292
|
parsl/tests/test_docs/test_kwargs.py,sha256=A8kmPIGoM0E9mN8TcAeA93UbX62etEk6p3I18N5nLpk,963
|
|
296
293
|
parsl/tests/test_docs/test_tutorial_1.py,sha256=2k_owiw39HJcm1i3YGYna9cNnMS0hpnFbEEdhP2xpxU,1437
|
|
297
294
|
parsl/tests/test_docs/test_workflow1.py,sha256=UrU9axV_cXqhD2GEQ_riJ34icJyNxqJ28eVT2BpG8kQ,976
|
|
298
|
-
parsl/tests/test_docs/test_workflow2.py,sha256=qeI789Qr9qtSG1DGhyt-Y_3KUcPltQfIyQVeZ73DeX4,1149
|
|
299
295
|
parsl/tests/test_docs/test_workflow4.py,sha256=PfOVDx5v_NtwDvg-ccC3A3SVM-SF0Pcybx2c7BF9Jdw,1159
|
|
300
296
|
parsl/tests/test_error_handling/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
301
297
|
parsl/tests/test_error_handling/test_fail.py,sha256=xx4TGWfL7le4cQ9nvnUkrlmKQJkskhD0l_3W1xwZSEI,282
|
|
302
298
|
parsl/tests/test_error_handling/test_python_walltime.py,sha256=rdmGZHIkuann2Njt3i62odKJ0FaODGr7-L96rOXNVYg,950
|
|
303
|
-
parsl/tests/test_error_handling/test_rand_fail.py,sha256=crFg4GmwdDpvx49_7w5Xt2P7H2R_V9f6i1Ar-QkASuU,3864
|
|
304
299
|
parsl/tests/test_error_handling/test_resource_spec.py,sha256=dyuzMkS3M_BmZUbu1mF7yojwkJehDbdFvphNlYwU9yM,1458
|
|
305
300
|
parsl/tests/test_error_handling/test_retries.py,sha256=zJ9D2hrvXQURnK2OIf5LfQFcSDVZ8rhdpp6peGccY7s,2372
|
|
306
301
|
parsl/tests/test_error_handling/test_retry_handler.py,sha256=8fMHffMBLhRyNreIqkrwamx9TYRZ498uVYNlkcbAoLU,1407
|
|
@@ -312,22 +307,23 @@ parsl/tests/test_htex/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3h
|
|
|
312
307
|
parsl/tests/test_htex/test_basic.py,sha256=OCX4hbXLqxRakjt_pB9F68qJJv8qGOTkpiIzjHkSq1k,451
|
|
313
308
|
parsl/tests/test_htex/test_block_manager_selector_unit.py,sha256=BeSj8jDeBHUEJVMVXwf0KLBhZ_pnsBEkG4vacldBfEY,737
|
|
314
309
|
parsl/tests/test_htex/test_command_client_timeout.py,sha256=5tBViUhPT1ejnDDztTcEA690aA2BUxnPY0FpMf-1AXE,2008
|
|
310
|
+
parsl/tests/test_htex/test_command_concurrency_regression_1321.py,sha256=_Bx7vRKOwyVEnJMnV7eHa1XjNWECWPohGY6eE2tQ9Tk,1251
|
|
315
311
|
parsl/tests/test_htex/test_connected_blocks.py,sha256=gaXZSr__pIaLvKY6rF-4r1p_4dO5V28gtxHLT-psEFg,1640
|
|
316
312
|
parsl/tests/test_htex/test_cpu_affinity_explicit.py,sha256=DVHrRCskDbJIrfB5YSi3ZSbfR4WzijA46aZfZzjNcrU,1382
|
|
317
313
|
parsl/tests/test_htex/test_disconnected_blocks.py,sha256=3V1Ol9gMS6knjLTgIjB5GrunRSp4ANsJ_2vAvpyMR6c,1858
|
|
318
314
|
parsl/tests/test_htex/test_disconnected_blocks_failing_provider.py,sha256=eOdipRpKMOkWAXB3UtY1UjqTiwfNs_csNLve8vllG_M,2040
|
|
319
315
|
parsl/tests/test_htex/test_drain.py,sha256=gYA7qzbv5ozox3clVdW0rlxAzwa_f_P0kqsAez3tIfk,2370
|
|
320
316
|
parsl/tests/test_htex/test_htex.py,sha256=J1uEGezic8ziPPZsQwfK9iNiTJ53NqXMhIg9CUunjZw,4901
|
|
321
|
-
parsl/tests/test_htex/test_interchange_exit_bad_registration.py,sha256=
|
|
317
|
+
parsl/tests/test_htex/test_interchange_exit_bad_registration.py,sha256=VWe-kj7kyvQcdUiAh3b2cZn8KWwHWIpel7bVa4XwlP0,4544
|
|
322
318
|
parsl/tests/test_htex/test_manager_failure.py,sha256=N-obuSZ8f7XA_XcddoN2LWKSVtpKUZvTHb7BFelS3iQ,1143
|
|
323
319
|
parsl/tests/test_htex/test_manager_selector_by_block.py,sha256=VQqSE6MDhGpDSjShGUTbj7l9Ahuj2tC9qD--o4puF44,1310
|
|
324
320
|
parsl/tests/test_htex/test_managers_command.py,sha256=SCwkfyGB-Udgu5L2yDMpR5bsaT-aNjNkiXxtuRb25DI,1622
|
|
325
321
|
parsl/tests/test_htex/test_missing_worker.py,sha256=gyp5i7_t-JHyJGtz_eXZKKBY5w8oqLOIxO6cJgGJMtQ,745
|
|
326
322
|
parsl/tests/test_htex/test_multiple_disconnected_blocks.py,sha256=2vXZoIx4NuAWYuiNoL5Gxr85w72qZ7Kdb3JGh0FufTg,1867
|
|
327
|
-
parsl/tests/test_htex/test_priority_queue.py,sha256=
|
|
323
|
+
parsl/tests/test_htex/test_priority_queue.py,sha256=sAs9W4I0LsmvPpuN9Q66yRY4zoSOEo0eMFh6DXlih0I,2336
|
|
328
324
|
parsl/tests/test_htex/test_resource_spec_validation.py,sha256=ZXW02jDd1rNxjBLh1jHyiz31zNoB9JzDw94aWllXFd4,1102
|
|
329
325
|
parsl/tests/test_htex/test_worker_failure.py,sha256=Uz-RHI-LK78FMjXUvrUFmo4iYfmpDVBUcBxxRb3UG9M,603
|
|
330
|
-
parsl/tests/test_htex/test_zmq_binding.py,sha256=
|
|
326
|
+
parsl/tests/test_htex/test_zmq_binding.py,sha256=SmX_63vvXKnzWISBr8HnJCrRqubx7K0blvgjq4Px2gc,4391
|
|
331
327
|
parsl/tests/test_monitoring/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
332
328
|
parsl/tests/test_monitoring/test_app_names.py,sha256=A-mOMCVhZDnUyJp32fsTUkHdcyval8o7WPEWacDkbD4,2208
|
|
333
329
|
parsl/tests/test_monitoring/test_basic.py,sha256=qyKKzjmoYwQC485Xk4QHqU3FvVILpuIjnJThMOl7pq4,6316
|
|
@@ -347,7 +343,7 @@ parsl/tests/test_mpi_apps/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJW
|
|
|
347
343
|
parsl/tests/test_mpi_apps/test_bad_mpi_config.py,sha256=QKvEUSrHIBrvqu2fRj1MAqxsYxDfcrdQ7dzWdOZejuU,1320
|
|
348
344
|
parsl/tests/test_mpi_apps/test_mpi_mode_enabled.py,sha256=_fpiaDq9yEUuBxTiuxLFsBt5r1oX9S-3S-YL5yRB13E,5423
|
|
349
345
|
parsl/tests/test_mpi_apps/test_mpi_prefix.py,sha256=yJslZvYK3JeL9UgxMwF9DDPR9QD4zJLGVjubD0F-utc,1950
|
|
350
|
-
parsl/tests/test_mpi_apps/test_mpi_scheduler.py,sha256=
|
|
346
|
+
parsl/tests/test_mpi_apps/test_mpi_scheduler.py,sha256=3LEPPYzZEPCYFiqv1YJIRJwiVmZHIplu8P-czUJ6N5U,5550
|
|
351
347
|
parsl/tests/test_mpi_apps/test_mpiex.py,sha256=mlFdHK3A1B6NsEhxTQQX8lhs9qVza36FMG99vNrBRW4,2021
|
|
352
348
|
parsl/tests/test_mpi_apps/test_resource_spec.py,sha256=5k6HM2jtb6sa7jetpI-Tl1nPQiN33VLaM7YT10c307E,3756
|
|
353
349
|
parsl/tests/test_providers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -399,7 +395,6 @@ parsl/tests/test_regression/test_221.py,sha256=jOS0EVu_2sbh10eg5hnivPvhNt0my_50v
|
|
|
399
395
|
parsl/tests/test_regression/test_226.py,sha256=tVqGAU99RRQqz9KuMgeLVoddot2pRqG2y4daW44RrlE,1110
|
|
400
396
|
parsl/tests/test_regression/test_2652.py,sha256=R_ZoX7Vgz4H2ionhjm_KWFW-vWt_MlgWV_zdTsT68M0,848
|
|
401
397
|
parsl/tests/test_regression/test_69a.py,sha256=sRkMT95b7WvFAK1hUy7eNwKnzFNqaX9qESdNmoh0rAo,1902
|
|
402
|
-
parsl/tests/test_regression/test_854.py,sha256=acFLEciwL0_ZHq6lBtFHRMTEHaPpAf3L4q4_f1LnAAU,1884
|
|
403
398
|
parsl/tests/test_regression/test_97_parallelism_0.py,sha256=Fe58KFhQpZuU982IP9ZSpKBb_Jpftv9pJjH73f8_ec8,1592
|
|
404
399
|
parsl/tests/test_regression/test_98.py,sha256=E7dituuonKN5uWocZkJYZlaE5x5rDM4MZlv2PloAKzY,452
|
|
405
400
|
parsl/tests/test_scaling/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -417,7 +412,6 @@ parsl/tests/test_serialization/test_2555_caching_deserializer.py,sha256=jEXJvbri
|
|
|
417
412
|
parsl/tests/test_serialization/test_3495_deserialize_managerlost.py,sha256=GoMtK6BmARicawzYR2eQj5jUSL9RZ_tHV3g19BdQuQ8,1144
|
|
418
413
|
parsl/tests/test_serialization/test_basic.py,sha256=4_1Rkq5tNl9EC0nfneF8kHTws7I0E6ovE_0DE97BEfU,544
|
|
419
414
|
parsl/tests/test_serialization/test_htex_code_cache.py,sha256=dd0XwlNDn6Lgj6-nHHjYWzl1FnhFLY_8Buxj77dyZ28,1840
|
|
420
|
-
parsl/tests/test_serialization/test_pack_resource_spec.py,sha256=-Vtyh8KyezZw8e7M2Z4m3LawY1Au4U-H3KRmVKXSut0,641
|
|
421
415
|
parsl/tests/test_serialization/test_proxystore_configured.py,sha256=lGWOSEWul16enDWhW-s7CK0d3eMDzm1324Fmj0cZMVU,2293
|
|
422
416
|
parsl/tests/test_serialization/test_proxystore_impl.py,sha256=uGd45sfPm9rJhzqKV0rI3lqdSOAUddQf-diEpcJAlcY,1228
|
|
423
417
|
parsl/tests/test_shutdown/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -457,13 +451,13 @@ parsl/usage_tracking/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hS
|
|
|
457
451
|
parsl/usage_tracking/api.py,sha256=iaCY58Dc5J4UM7_dJzEEs871P1p1HdxBMtNGyVdzc9g,1821
|
|
458
452
|
parsl/usage_tracking/levels.py,sha256=xbfzYEsd55KiZJ-mzNgPebvOH4rRHum04hROzEf41tU,291
|
|
459
453
|
parsl/usage_tracking/usage.py,sha256=hbMo5BYgIWqMcFWqN-HYP1TbwNrTonpv-usfwnCFJKY,9212
|
|
460
|
-
parsl-2025.9.
|
|
461
|
-
parsl-2025.9.
|
|
462
|
-
parsl-2025.9.
|
|
463
|
-
parsl-2025.9.
|
|
464
|
-
parsl-2025.9.
|
|
465
|
-
parsl-2025.9.
|
|
466
|
-
parsl-2025.9.
|
|
467
|
-
parsl-2025.9.
|
|
468
|
-
parsl-2025.9.
|
|
469
|
-
parsl-2025.9.
|
|
454
|
+
parsl-2025.9.22.data/scripts/exec_parsl_function.py,sha256=YXKVVIa4zXmOtz-0Ca4E_5nQfN_3S2bh2tB75uZZB4w,7774
|
|
455
|
+
parsl-2025.9.22.data/scripts/interchange.py,sha256=5hLSdQNG65v0iSx2FSeS6uyp7i3Ez2qWIzNSVblSixI,26076
|
|
456
|
+
parsl-2025.9.22.data/scripts/parsl_coprocess.py,sha256=zrVjEqQvFOHxsLufPi00xzMONagjVwLZbavPM7bbjK4,5722
|
|
457
|
+
parsl-2025.9.22.data/scripts/process_worker_pool.py,sha256=WGR9yr8EfBptQ6X-CvAPQEo1rlljD6peCc-za36-1xM,40674
|
|
458
|
+
parsl-2025.9.22.dist-info/LICENSE,sha256=tAkwu8-AdEyGxGoSvJ2gVmQdcicWw3j1ZZueVV74M-E,11357
|
|
459
|
+
parsl-2025.9.22.dist-info/METADATA,sha256=IpHlJRMpOyOsgV7Ig9GQssk2IETO6cSZWaqEifE29c0,4055
|
|
460
|
+
parsl-2025.9.22.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
|
|
461
|
+
parsl-2025.9.22.dist-info/entry_points.txt,sha256=XqnsWDYoEcLbsMcpnYGKLEnSBmaIe1YoM5YsBdJG2tI,176
|
|
462
|
+
parsl-2025.9.22.dist-info/top_level.txt,sha256=PIheYoUFQtF2icLsgOykgU-Cjuwr2Oi6On2jo5RYgRM,6
|
|
463
|
+
parsl-2025.9.22.dist-info/RECORD,,
|
|
@@ -1,88 +0,0 @@
|
|
|
1
|
-
import argparse
|
|
2
|
-
import logging
|
|
3
|
-
import time
|
|
4
|
-
|
|
5
|
-
import pytest
|
|
6
|
-
|
|
7
|
-
import parsl
|
|
8
|
-
from parsl.app.app import python_app # , bash_app
|
|
9
|
-
from parsl.jobs.states import JobState
|
|
10
|
-
from parsl.tests.site_tests.site_config_selector import fresh_config
|
|
11
|
-
|
|
12
|
-
logger = logging.getLogger(__name__)
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
@python_app
|
|
16
|
-
def platform(sleep=10, stdout=None):
|
|
17
|
-
import time
|
|
18
|
-
time.sleep(sleep)
|
|
19
|
-
return True
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
@pytest.mark.local
|
|
23
|
-
@pytest.mark.skip("This test cannot run on sites which cannot be identified by site_config_selector")
|
|
24
|
-
def test_provider():
|
|
25
|
-
""" Provider scaling
|
|
26
|
-
"""
|
|
27
|
-
logger.info("Starting test_provider")
|
|
28
|
-
config = fresh_config()
|
|
29
|
-
name = config.executors[0].label
|
|
30
|
-
parsl.load(config)
|
|
31
|
-
|
|
32
|
-
dfk = parsl.dfk()
|
|
33
|
-
logger.info("Trying to get executor : {}".format(name))
|
|
34
|
-
|
|
35
|
-
x = platform(sleep=0)
|
|
36
|
-
logger.info("Result is {}".format(x.result()))
|
|
37
|
-
|
|
38
|
-
executor = dfk.executors[name]
|
|
39
|
-
provider = dfk.executors[name].provider
|
|
40
|
-
|
|
41
|
-
# At this point we should have 1 job
|
|
42
|
-
_, current_jobs = executor._get_block_and_job_ids()
|
|
43
|
-
assert len(current_jobs) == 1, "Expected 1 job at init, got {}".format(len(current_jobs))
|
|
44
|
-
|
|
45
|
-
logger.info("Getting provider status (1)")
|
|
46
|
-
status = provider.status(current_jobs)
|
|
47
|
-
logger.info("Got provider status")
|
|
48
|
-
assert status[0].state == JobState.RUNNING, "Expected job to be in state RUNNING"
|
|
49
|
-
|
|
50
|
-
# Scale down to 0
|
|
51
|
-
scale_in_blocks = executor.scale_in(blocks=1)
|
|
52
|
-
logger.info("Now sleeping 60 seconds")
|
|
53
|
-
time.sleep(60)
|
|
54
|
-
logger.info("Sleep finished")
|
|
55
|
-
logger.info("Getting provider status (2)")
|
|
56
|
-
status = executor.status()
|
|
57
|
-
logger.info("Got executor status")
|
|
58
|
-
logger.info("Block status: {}".format(status))
|
|
59
|
-
assert status[scale_in_blocks[0]].terminal is True, "Terminal state"
|
|
60
|
-
logger.info("Job in terminal state")
|
|
61
|
-
|
|
62
|
-
_, current_jobs = executor._get_block_and_job_ids()
|
|
63
|
-
# PR 1952 stoped removing scale_in blocks from self.blocks_to_job_id
|
|
64
|
-
# A new PR will handle removing blocks from self.block
|
|
65
|
-
# this includes failed/completed/canceled blocks
|
|
66
|
-
assert len(current_jobs) == 1, "Expected current_jobs == 1"
|
|
67
|
-
dfk.cleanup()
|
|
68
|
-
parsl.clear()
|
|
69
|
-
logger.info("Ended test_provider")
|
|
70
|
-
return True
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
if __name__ == '__main__':
|
|
74
|
-
|
|
75
|
-
parser = argparse.ArgumentParser()
|
|
76
|
-
parser.add_argument("-c", "--count", default="4",
|
|
77
|
-
help="Count of apps to launch")
|
|
78
|
-
parser.add_argument("-t", "--time", default="60",
|
|
79
|
-
help="Sleep time for each app")
|
|
80
|
-
|
|
81
|
-
parser.add_argument("-d", "--debug", action='store_true',
|
|
82
|
-
help="Count of apps to launch")
|
|
83
|
-
args = parser.parse_args()
|
|
84
|
-
|
|
85
|
-
if args.debug:
|
|
86
|
-
parsl.set_stream_logger()
|
|
87
|
-
|
|
88
|
-
x = test_provider()
|
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
import argparse
|
|
2
|
-
|
|
3
|
-
import pytest
|
|
4
|
-
|
|
5
|
-
import parsl
|
|
6
|
-
from parsl.app.app import python_app
|
|
7
|
-
from parsl.tests.site_tests.site_config_selector import fresh_config
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
@python_app
|
|
11
|
-
def platform(sleep=10, stdout=None):
|
|
12
|
-
import platform
|
|
13
|
-
import time
|
|
14
|
-
time.sleep(sleep)
|
|
15
|
-
return platform.uname()
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
@pytest.mark.local
|
|
19
|
-
@pytest.mark.skip("The behaviour this test is testing is unclear: there is no guarantee that tasks will go to different nodes")
|
|
20
|
-
def test_platform(n=2, sleep_dur=10):
|
|
21
|
-
""" This should sleep to make sure that concurrent apps will go to different workers
|
|
22
|
-
on different nodes.
|
|
23
|
-
"""
|
|
24
|
-
config = fresh_config()
|
|
25
|
-
if config.executors[0].label == "htex_local":
|
|
26
|
-
return
|
|
27
|
-
|
|
28
|
-
parsl.load(fresh_config())
|
|
29
|
-
|
|
30
|
-
dfk = parsl.dfk()
|
|
31
|
-
name = list(dfk.executors.keys())[0]
|
|
32
|
-
print("Trying to get executor : ", name)
|
|
33
|
-
|
|
34
|
-
x = [platform(sleep=1) for i in range(2)]
|
|
35
|
-
print([i.result() for i in x])
|
|
36
|
-
|
|
37
|
-
print("Executor : ", dfk.executors[name])
|
|
38
|
-
print("Connected : ", dfk.executors[name].connected_workers())
|
|
39
|
-
print("Outstanding : ", dfk.executors[name].outstanding())
|
|
40
|
-
|
|
41
|
-
d = []
|
|
42
|
-
for i in range(0, n):
|
|
43
|
-
x = platform(sleep=sleep_dur)
|
|
44
|
-
d.append(x)
|
|
45
|
-
|
|
46
|
-
pinfo = set([i.result()for i in d])
|
|
47
|
-
assert len(pinfo) == 2, "Expected two nodes, instead got {}".format(pinfo)
|
|
48
|
-
|
|
49
|
-
print("Test passed")
|
|
50
|
-
|
|
51
|
-
dfk.cleanup()
|
|
52
|
-
parsl.clear()
|
|
53
|
-
return True
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
if __name__ == '__main__':
|
|
57
|
-
|
|
58
|
-
parser = argparse.ArgumentParser()
|
|
59
|
-
parser.add_argument("-c", "--count", default="4",
|
|
60
|
-
help="Count of apps to launch")
|
|
61
|
-
parser.add_argument("-t", "--time", default="60",
|
|
62
|
-
help="Sleep time for each app")
|
|
63
|
-
parser.add_argument("-d", "--debug", action='store_true',
|
|
64
|
-
help="Count of apps to launch")
|
|
65
|
-
args = parser.parse_args()
|
|
66
|
-
|
|
67
|
-
if args.debug:
|
|
68
|
-
parsl.set_stream_logger()
|
|
69
|
-
|
|
70
|
-
x = test_platform(n=int(args.count), sleep_dur=int(args.time))
|