parsl 2025.9.15__py3-none-any.whl → 2025.9.29__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/benchmark/perf.py +22 -9
- parsl/dataflow/dflow.py +2 -3
- parsl/dataflow/memoization.py +9 -19
- parsl/executors/execute_task.py +2 -8
- parsl/executors/flux/executor.py +3 -5
- parsl/executors/high_throughput/executor.py +12 -11
- parsl/executors/high_throughput/interchange.py +8 -6
- parsl/executors/high_throughput/mpi_executor.py +1 -2
- parsl/executors/high_throughput/mpi_resource_management.py +3 -10
- parsl/executors/high_throughput/process_worker_pool.py +15 -3
- parsl/executors/high_throughput/zmq_pipes.py +7 -24
- parsl/executors/radical/executor.py +2 -6
- parsl/executors/radical/rpex_worker.py +2 -2
- parsl/executors/taskvine/executor.py +5 -1
- parsl/serialize/__init__.py +6 -9
- parsl/serialize/facade.py +0 -32
- parsl/tests/configs/taskvine_ex.py +1 -1
- parsl/tests/test_checkpointing/test_periodic.py +15 -9
- parsl/tests/test_execute_task.py +2 -11
- parsl/tests/test_htex/test_interchange_exit_bad_registration.py +0 -1
- parsl/tests/test_htex/test_priority_queue.py +7 -2
- parsl/tests/test_mpi_apps/test_mpi_scheduler.py +18 -43
- parsl/tests/test_regression/test_3874.py +47 -0
- parsl/version.py +1 -1
- {parsl-2025.9.15.data → parsl-2025.9.29.data}/scripts/interchange.py +8 -6
- {parsl-2025.9.15.data → parsl-2025.9.29.data}/scripts/process_worker_pool.py +15 -3
- {parsl-2025.9.15.dist-info → parsl-2025.9.29.dist-info}/METADATA +3 -4
- {parsl-2025.9.15.dist-info → parsl-2025.9.29.dist-info}/RECORD +34 -35
- parsl/tests/configs/local_threads_checkpoint_periodic.py +0 -11
- parsl/tests/test_serialization/test_pack_resource_spec.py +0 -23
- {parsl-2025.9.15.data → parsl-2025.9.29.data}/scripts/exec_parsl_function.py +0 -0
- {parsl-2025.9.15.data → parsl-2025.9.29.data}/scripts/parsl_coprocess.py +0 -0
- {parsl-2025.9.15.dist-info → parsl-2025.9.29.dist-info}/LICENSE +0 -0
- {parsl-2025.9.15.dist-info → parsl-2025.9.29.dist-info}/WHEEL +0 -0
- {parsl-2025.9.15.dist-info → parsl-2025.9.29.dist-info}/entry_points.txt +0 -0
- {parsl-2025.9.15.dist-info → parsl-2025.9.29.dist-info}/top_level.txt +0 -0
|
@@ -2,11 +2,17 @@ import pytest
|
|
|
2
2
|
|
|
3
3
|
import parsl
|
|
4
4
|
from parsl.app.app import python_app
|
|
5
|
-
from parsl.
|
|
5
|
+
from parsl.config import Config
|
|
6
|
+
from parsl.executors.threads import ThreadPoolExecutor
|
|
6
7
|
|
|
7
8
|
|
|
8
|
-
def
|
|
9
|
-
|
|
9
|
+
def fresh_config():
|
|
10
|
+
tpe = ThreadPoolExecutor(label='local_threads_checkpoint_periodic', max_threads=1)
|
|
11
|
+
return Config(
|
|
12
|
+
executors=[tpe],
|
|
13
|
+
checkpoint_mode='periodic',
|
|
14
|
+
checkpoint_period='00:00:02'
|
|
15
|
+
)
|
|
10
16
|
|
|
11
17
|
|
|
12
18
|
@python_app(cache=True)
|
|
@@ -25,12 +31,12 @@ def tstamp_to_seconds(line):
|
|
|
25
31
|
def test_periodic():
|
|
26
32
|
"""Test checkpointing with task_periodic behavior
|
|
27
33
|
"""
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
+
with parsl.load(fresh_config()):
|
|
35
|
+
h, m, s = map(int, parsl.dfk().config.checkpoint_period.split(":"))
|
|
36
|
+
assert h == 0, "Verify test setup"
|
|
37
|
+
assert m == 0, "Verify test setup"
|
|
38
|
+
assert s > 0, "Verify test setup"
|
|
39
|
+
sleep_for = s + 1
|
|
34
40
|
futs = [slow_double(sleep_for) for _ in range(4)]
|
|
35
41
|
[f.result() for f in futs]
|
|
36
42
|
run_dir = parsl.dfk().run_dir
|
parsl/tests/test_execute_task.py
CHANGED
|
@@ -3,7 +3,7 @@ import os
|
|
|
3
3
|
import pytest
|
|
4
4
|
|
|
5
5
|
from parsl.executors.execute_task import execute_task
|
|
6
|
-
from parsl.serialize.facade import
|
|
6
|
+
from parsl.serialize.facade import pack_apply_message
|
|
7
7
|
|
|
8
8
|
|
|
9
9
|
def addemup(*args: int, name: str = "apples"):
|
|
@@ -15,15 +15,6 @@ def addemup(*args: int, name: str = "apples"):
|
|
|
15
15
|
def test_execute_task():
|
|
16
16
|
args = (1, 2, 3)
|
|
17
17
|
kwargs = {"name": "boots"}
|
|
18
|
-
buff =
|
|
18
|
+
buff = pack_apply_message(addemup, args, kwargs)
|
|
19
19
|
res = execute_task(buff)
|
|
20
20
|
assert res == addemup(*args, **kwargs)
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
@pytest.mark.local
|
|
24
|
-
def test_execute_task_resource_spec():
|
|
25
|
-
resource_spec = {"num_nodes": 2, "ranks_per_node": 2, "num_ranks": 4}
|
|
26
|
-
buff = pack_res_spec_apply_message(addemup, (1, 2), {}, resource_spec)
|
|
27
|
-
execute_task(buff)
|
|
28
|
-
for key, val in resource_spec.items():
|
|
29
|
-
assert os.environ[f"PARSL_{key.upper()}"] == str(val)
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
from random import randint
|
|
2
|
+
|
|
1
3
|
import pytest
|
|
2
4
|
|
|
3
5
|
import parsl
|
|
@@ -40,8 +42,11 @@ 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
|
|
|
@@ -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
|
+
ctxt = {"resource_spec": {"num_nodes": 2, "ranks_per_node": 2}}
|
|
47
|
+
task_package = {"task_id": 1, "buffer": mock_task_buffer, "context": ctxt}
|
|
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
|
+
ctxt = {"resource_spec": {"num_nodes": trip, "ranks_per_node": 2}}
|
|
86
|
+
task_package = {"task_id": trip, "buffer": mock_task_buffer, "context": ctxt}
|
|
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
|
+
ctxt_1 = {"resource_spec": {"num_nodes": 8, "ranks_per_node": 2}}
|
|
111
|
+
task_package = {"task_id": 1, "buffer": mock_task_buffer, "context": ctxt_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
|
+
ctxt_2 = {"resource_spec": {"num_nodes": 8, "ranks_per_node": 2}}
|
|
118
|
+
task_package = {"task_id": 2, "buffer": mock_task_buffer, "context": ctxt_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(ctxt_1["resource_spec"]["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(ctxt_2["resource_spec"]["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
|
+
ctxt = {"resource_spec": {"num_nodes": 8, "ranks_per_node": 2}}
|
|
161
|
+
task_package = {"task_id": i, "buffer": mock_task_buffer, "context": ctxt}
|
|
187
162
|
scheduler.put_task(task_package)
|
|
188
163
|
assert scheduler._backlog_queue.qsize() == 2, "Expected 2 backlogged tasks"
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import shutil
|
|
2
|
+
|
|
3
|
+
import pytest
|
|
4
|
+
|
|
5
|
+
import parsl
|
|
6
|
+
from parsl.app.app import python_app
|
|
7
|
+
from parsl.config import Config
|
|
8
|
+
from parsl.executors import HighThroughputExecutor
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
@python_app
|
|
12
|
+
def noop():
|
|
13
|
+
pass
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
@pytest.mark.local
|
|
17
|
+
def test_regression_3874(tmpd_cwd_session):
|
|
18
|
+
# HTEX run 1
|
|
19
|
+
|
|
20
|
+
rundir_1 = str(tmpd_cwd_session / "1")
|
|
21
|
+
|
|
22
|
+
config = Config(executors=[HighThroughputExecutor()], strategy_period=0.5)
|
|
23
|
+
config.run_dir = rundir_1
|
|
24
|
+
|
|
25
|
+
with parsl.load(config):
|
|
26
|
+
noop().result()
|
|
27
|
+
|
|
28
|
+
# It is necessary to delete this rundir to exercise the bug. Otherwise,
|
|
29
|
+
# the next run will be able to continue looking at this directory - the
|
|
30
|
+
# bug manifests when it cannot.
|
|
31
|
+
|
|
32
|
+
shutil.rmtree(rundir_1)
|
|
33
|
+
|
|
34
|
+
# HTEX run 2
|
|
35
|
+
# In the case of issue 3874, this run hangs (rather than failing) as the
|
|
36
|
+
# JobStatusPoller fails to collect status of all of its managed tasks
|
|
37
|
+
# every iteration, without converging towards failure.
|
|
38
|
+
|
|
39
|
+
rundir_2 = str(tmpd_cwd_session / "2")
|
|
40
|
+
|
|
41
|
+
config = Config(executors=[HighThroughputExecutor()], strategy_period=0.5)
|
|
42
|
+
config.run_dir = rundir_2
|
|
43
|
+
|
|
44
|
+
with parsl.load(config):
|
|
45
|
+
noop().result()
|
|
46
|
+
|
|
47
|
+
shutil.rmtree(rundir_2)
|
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)
|
|
@@ -220,7 +219,7 @@ class Interchange:
|
|
|
220
219
|
|
|
221
220
|
reply: Any # the type of reply depends on the command_req received (aka this needs dependent types...)
|
|
222
221
|
|
|
223
|
-
if self.
|
|
222
|
+
if self.socks.get(self.command_channel) == zmq.POLLIN:
|
|
224
223
|
logger.debug("entering command_server section")
|
|
225
224
|
|
|
226
225
|
command_req = self.command_channel.recv_pyobj()
|
|
@@ -328,12 +327,12 @@ class Interchange:
|
|
|
328
327
|
"""Process incoming task message(s).
|
|
329
328
|
"""
|
|
330
329
|
|
|
331
|
-
if self.
|
|
330
|
+
if self.socks.get(self.task_incoming) == zmq.POLLIN:
|
|
332
331
|
logger.debug("start task_incoming section")
|
|
333
332
|
msg = self.task_incoming.recv_pyobj()
|
|
334
333
|
|
|
335
334
|
# Process priority, higher number = lower priority
|
|
336
|
-
resource_spec = msg.get('resource_spec', {})
|
|
335
|
+
resource_spec = msg['context'].get('resource_spec', {})
|
|
337
336
|
priority = resource_spec.get('priority', float('inf'))
|
|
338
337
|
queue_entry = (-priority, -self.task_counter, msg)
|
|
339
338
|
|
|
@@ -361,9 +360,10 @@ class Interchange:
|
|
|
361
360
|
mtype = meta['type']
|
|
362
361
|
except Exception as e:
|
|
363
362
|
logger.warning(
|
|
364
|
-
|
|
363
|
+
'Failed to read manager message; ignoring message'
|
|
364
|
+
f' (Exception: [{type(e).__name__}] {e})'
|
|
365
365
|
)
|
|
366
|
-
logger.debug('
|
|
366
|
+
logger.debug('Raw message bytes:\n %r\n', msg_parts, exc_info=e)
|
|
367
367
|
return
|
|
368
368
|
|
|
369
369
|
logger.debug(
|
|
@@ -627,6 +627,8 @@ def start_file_logger(filename: str, level: int = logging.DEBUG, format_string:
|
|
|
627
627
|
|
|
628
628
|
|
|
629
629
|
if __name__ == "__main__":
|
|
630
|
+
from parsl.utils import setproctitle
|
|
631
|
+
|
|
630
632
|
setproctitle("parsl: HTEX interchange")
|
|
631
633
|
|
|
632
634
|
config = pickle.load(sys.stdin.buffer)
|
|
@@ -373,6 +373,8 @@ class Manager:
|
|
|
373
373
|
if socks.get(ix_sock) == zmq.POLLIN:
|
|
374
374
|
pkl_msg = ix_sock.recv()
|
|
375
375
|
tasks = pickle.loads(pkl_msg)
|
|
376
|
+
del pkl_msg
|
|
377
|
+
|
|
376
378
|
last_interchange_contact = time.time()
|
|
377
379
|
|
|
378
380
|
if tasks == HEARTBEAT_CODE:
|
|
@@ -454,6 +456,7 @@ class Manager:
|
|
|
454
456
|
'exception': serialize(RemoteExceptionWrapper(*sys.exc_info()))}
|
|
455
457
|
pkl_package = pickle.dumps(result_package)
|
|
456
458
|
self.pending_result_queue.put(pkl_package)
|
|
459
|
+
del pkl_package
|
|
457
460
|
except KeyError:
|
|
458
461
|
logger.info("Worker {} was not busy when it died".format(worker_id))
|
|
459
462
|
|
|
@@ -603,6 +606,10 @@ def update_resource_spec_env_vars(mpi_launcher: str, resource_spec: Dict, node_i
|
|
|
603
606
|
|
|
604
607
|
|
|
605
608
|
def _init_mpi_env(mpi_launcher: str, resource_spec: Dict):
|
|
609
|
+
for varname in resource_spec:
|
|
610
|
+
envname = "PARSL_" + str(varname).upper()
|
|
611
|
+
os.environ[envname] = str(resource_spec[varname])
|
|
612
|
+
|
|
606
613
|
node_list = resource_spec.get("MPI_NODELIST")
|
|
607
614
|
if node_list is None:
|
|
608
615
|
return
|
|
@@ -753,8 +760,8 @@ def worker(
|
|
|
753
760
|
worker_enqueued = True
|
|
754
761
|
|
|
755
762
|
try:
|
|
756
|
-
# The worker will receive {'task_id':<tid>, 'buffer':<buf>}
|
|
757
763
|
req = task_queue.get(timeout=task_queue_timeout)
|
|
764
|
+
# req is {'task_id':<tid>, 'buffer':<buf>, 'resource_spec':<dict>}
|
|
758
765
|
except queue.Empty:
|
|
759
766
|
continue
|
|
760
767
|
|
|
@@ -766,7 +773,10 @@ def worker(
|
|
|
766
773
|
ready_worker_count.value -= 1
|
|
767
774
|
worker_enqueued = False
|
|
768
775
|
|
|
769
|
-
|
|
776
|
+
ctxt = req["context"]
|
|
777
|
+
res_spec = ctxt.get("resource_spec", {})
|
|
778
|
+
|
|
779
|
+
_init_mpi_env(mpi_launcher=mpi_launcher, resource_spec=res_spec)
|
|
770
780
|
|
|
771
781
|
try:
|
|
772
782
|
result = execute_task(req['buffer'])
|
|
@@ -776,7 +786,8 @@ def worker(
|
|
|
776
786
|
result_package = {'type': 'result', 'task_id': tid, 'exception': serialize(RemoteExceptionWrapper(*sys.exc_info()))}
|
|
777
787
|
else:
|
|
778
788
|
result_package = {'type': 'result', 'task_id': tid, 'result': serialized_result}
|
|
779
|
-
|
|
789
|
+
del serialized_result
|
|
790
|
+
del req
|
|
780
791
|
|
|
781
792
|
logger.info("Completed executor task {}".format(tid))
|
|
782
793
|
try:
|
|
@@ -788,6 +799,7 @@ def worker(
|
|
|
788
799
|
})
|
|
789
800
|
|
|
790
801
|
result_queue.put(pkl_package)
|
|
802
|
+
del pkl_package, result_package
|
|
791
803
|
tasks_in_progress.pop(worker_id)
|
|
792
804
|
logger.info("All processing finished for executor task {}".format(tid))
|
|
793
805
|
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: parsl
|
|
3
|
-
Version: 2025.9.
|
|
3
|
+
Version: 2025.9.29
|
|
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.29.tar.gz
|
|
7
7
|
Author: The Parsl Team
|
|
8
8
|
Author-email: parsl@googlegroups.com
|
|
9
9
|
License: Apache 2.0
|
|
@@ -11,11 +11,10 @@ Keywords: Workflows,Scientific computing
|
|
|
11
11
|
Classifier: Development Status :: 5 - Production/Stable
|
|
12
12
|
Classifier: Intended Audience :: Developers
|
|
13
13
|
Classifier: License :: OSI Approved :: Apache Software License
|
|
14
|
-
Classifier: Programming Language :: Python :: 3.9
|
|
15
14
|
Classifier: Programming Language :: Python :: 3.10
|
|
16
15
|
Classifier: Programming Language :: Python :: 3.11
|
|
17
16
|
Classifier: Programming Language :: Python :: 3.12
|
|
18
|
-
Requires-Python: >=3.
|
|
17
|
+
Requires-Python: >=3.10.0
|
|
19
18
|
License-File: LICENSE
|
|
20
19
|
Requires-Dist: pyzmq>=17.1.2
|
|
21
20
|
Requires-Dist: typeguard!=3.*,<5,>=2.10
|
|
@@ -8,7 +8,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=mjuTAq4pki_czBLWMzbgU5oYb9g5K_nnBiiBEpTePVE,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
|
|
@@ -16,7 +16,7 @@ parsl/app/errors.py,sha256=SQQ1fNp8834DZnoRnlsoZn1WMAFM3fnh2CNHRPmFcKc,3854
|
|
|
16
16
|
parsl/app/futures.py,sha256=2tMUeKIuDzwuhLIWlsEiZuDrhkxxsUed4QUbQuQg20Y,2826
|
|
17
17
|
parsl/app/python.py,sha256=0hrz2BppVOwwNfh5hnoP70Yv56gSRkIoT-fP9XNb4v4,2331
|
|
18
18
|
parsl/benchmark/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
19
|
-
parsl/benchmark/perf.py,sha256=
|
|
19
|
+
parsl/benchmark/perf.py,sha256=DRTNSA_-Qq01GfMl6MEWtwENEu1aReHC23SX6f0HuXk,3615
|
|
20
20
|
parsl/concurrent/__init__.py,sha256=TvIVceJYaJAsxedNBF3Vdo9lEQNHH_j3uxJv0zUjP7w,3288
|
|
21
21
|
parsl/configs/ASPIRE1.py,sha256=nQm6BvCPE07YXEsC94wMrHeVAyYcyfvPgWyHIysjAoA,1690
|
|
22
22
|
parsl/configs/Azure.py,sha256=CJms3xWmdb-S3CksbHrPF2TfMxJC5I0faqUKCOzVg0k,1268
|
|
@@ -55,45 +55,45 @@ parsl/data_provider/staging.py,sha256=ZDZuuFg38pjUStegKPcvPsfGp3iMeReMzfU6DSwtJj
|
|
|
55
55
|
parsl/data_provider/zip.py,sha256=S4kVuH9lxAegRURYbvIUR7EYYBOccyslaqyCrVWUBhw,4497
|
|
56
56
|
parsl/dataflow/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
57
57
|
parsl/dataflow/dependency_resolvers.py,sha256=Om8Dgh7a0ZwgXAc6TlhxLSzvxXHDlNNV1aBNiD3JTNY,3325
|
|
58
|
-
parsl/dataflow/dflow.py,sha256=
|
|
58
|
+
parsl/dataflow/dflow.py,sha256=CPhl-hYHLbH_zoE2rhRhcz2B4JWmm5pICWLUEkALPgQ,62860
|
|
59
59
|
parsl/dataflow/errors.py,sha256=daVfr2BWs1zRsGD6JtosEMttWHvK1df1Npiu_MUvFKg,3998
|
|
60
60
|
parsl/dataflow/futures.py,sha256=08LuP-HFiHBIZmeKCjlsazw_WpQ5fwevrU2_WbidkYw,6080
|
|
61
|
-
parsl/dataflow/memoization.py,sha256=
|
|
61
|
+
parsl/dataflow/memoization.py,sha256=AyO1khMwlbuGJQQk-l_wJRj0QeOHTOnmlvzXgQdNNQk,11977
|
|
62
62
|
parsl/dataflow/rundirs.py,sha256=JZdzybVGubY35jL2YiKcDo65ZmRl1WyOApc8ajYxztc,1087
|
|
63
63
|
parsl/dataflow/states.py,sha256=hV6mfv-y4A6xrujeQglcomnfEs7y3Xm2g6JFwC6dvgQ,2612
|
|
64
64
|
parsl/dataflow/taskrecord.py,sha256=qIW7T6hn9dYTuNPdUura3HQwwUpUJACwPP5REm5COf4,3042
|
|
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=Q8KpXeN9Eiv3NIJHC5zsGEqW4UO0hpLHTnPVFMUIiq4,40284
|
|
79
|
+
parsl/executors/high_throughput/interchange.py,sha256=ODXsNNTkaEtwCGwqa5aclXyLw7x_dEtO9mANsOUTeNE,26158
|
|
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
|
-
parsl/executors/high_throughput/mpi_executor.py,sha256=
|
|
83
|
+
parsl/executors/high_throughput/mpi_executor.py,sha256=Tumz8VD7ujxCFjuEsJq47Ez49QqO3OMZi-So3JK3vos,5180
|
|
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=KEG_yulFxEl61hZapdBsf3AejetivIBmXMkq1IkGcH0,7799
|
|
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=hmIiqz7tV2J35UkQjYrmqAkpZiZlfCrXxuDqv2rfSaM,40863
|
|
88
|
+
parsl/executors/high_throughput/zmq_pipes.py,sha256=Lr3A9Y5uyyf4VdD4L0Yontg-mNlO566k9-Ag7tXKp18,7330
|
|
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
|
|
96
|
-
parsl/executors/taskvine/executor.py,sha256=
|
|
96
|
+
parsl/executors/taskvine/executor.py,sha256=L2k8uxyagbCiYjoDkPAgeoRlsxQNXAlOWnTDChpWp28,31538
|
|
97
97
|
parsl/executors/taskvine/factory.py,sha256=GU5JryEAKJuYKwrSc162BN-lhcKhapvBZHT820pxwic,2772
|
|
98
98
|
parsl/executors/taskvine/factory_config.py,sha256=ZQC5vyDe8cM0nuv7fbBCV2xnWGAZ87iLlT2UqmFFI1U,3695
|
|
99
99
|
parsl/executors/taskvine/manager.py,sha256=2GKpw9bnA2NQmti1AACZ6gHRVa8MN88NBk6j5VyTUIY,25935
|
|
@@ -190,18 +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
202
|
parsl/tests/test_callables.py,sha256=97vrIF1_hfDGd81FM1bhR6FemZMWFcALrH6pVHMTCt8,1974
|
|
203
203
|
parsl/tests/test_curvezmq.py,sha256=CmLQforq2WPYFC5OsOGh5a9ujiEFKygktZi1mpOn3XU,11239
|
|
204
|
-
parsl/tests/test_execute_task.py,sha256=
|
|
204
|
+
parsl/tests/test_execute_task.py,sha256=IzvuDLLckrRzghjvvcsUTNXFKskNsNQeKy1Bx-NWf2k,457
|
|
205
205
|
parsl/tests/test_flux.py,sha256=TxkVPjksl1usdE9Y6y2FYhdOOmYFTlbEv_V9WnvF41A,5098
|
|
206
206
|
parsl/tests/test_summary.py,sha256=x1RfWCFLzHjBw2ukwoRZPW1LFCKiwDmxx86ES-6yGRA,552
|
|
207
207
|
parsl/tests/test_thread_parallelism.py,sha256=TVNeQ1NkUhaf3YbbzUSH-ozFFdX_GbX-5ygommjVxvc,1653
|
|
@@ -226,7 +226,6 @@ parsl/tests/configs/local_radical_mpi.py,sha256=5OabeXXJPE0fyiA1AlGcQYoPRjQRk-HN
|
|
|
226
226
|
parsl/tests/configs/local_threads.py,sha256=oEnQSlom_JMLFX9_Ln49JAfOP3nSMbw8gTaDJo_NYfo,202
|
|
227
227
|
parsl/tests/configs/local_threads_checkpoint.py,sha256=Ex7CI1Eo6wVRsem9uXTtbVJrkKc_vOYlVvCNa2RLpIo,286
|
|
228
228
|
parsl/tests/configs/local_threads_checkpoint_dfk_exit.py,sha256=ECL1n0uBsXDuW3sLCmjiwe8s3Xd7EFIj5wt446w6bh4,254
|
|
229
|
-
parsl/tests/configs/local_threads_checkpoint_periodic.py,sha256=F2MVlwJZk-hkCgCrsAm_rKsv4mtLgsf5cyPsRoHm0ig,319
|
|
230
229
|
parsl/tests/configs/local_threads_checkpoint_task_exit.py,sha256=zHKN68T-xhAVQwQp3fSWPIEcWOx-F7NBGZTOhF07iL8,256
|
|
231
230
|
parsl/tests/configs/local_threads_ftp_in_task.py,sha256=c9odRbxgj1bM_ttpkWTh2Ch_MV7f5cmn-68BOjLeJ70,444
|
|
232
231
|
parsl/tests/configs/local_threads_globus.py,sha256=NhY27cD4vcqLh762Ye0BINZnt63EmTyHXg7FQMffOBw,1097
|
|
@@ -238,7 +237,7 @@ parsl/tests/configs/osg_htex.py,sha256=x-C_r7Kpwvqroc4Ay1Yaya9K6_j7IU1ywqPegBU7H
|
|
|
238
237
|
parsl/tests/configs/petrelkube.py,sha256=uUxrZrD_cF-_t6ytlRA_MUtw8RQbpW0CmNRbw3mWs1o,1699
|
|
239
238
|
parsl/tests/configs/slurm_local.py,sha256=8-Zlxg4F2lXQq-_usjawkf-wen9Tu5FOFOE9N6qqh6M,737
|
|
240
239
|
parsl/tests/configs/summit.py,sha256=0LbuTVmc8nl2eGiqAayhV0RCx0pg5kUpYhz9LvTFhDo,1378
|
|
241
|
-
parsl/tests/configs/taskvine_ex.py,sha256=
|
|
240
|
+
parsl/tests/configs/taskvine_ex.py,sha256=karvmnW1KY-IOq6QvdBiaC5jjmzWlz_eoJDHDUlh-5o,473
|
|
242
241
|
parsl/tests/configs/user_opts.py,sha256=JcEQr1emjyTdmVDddcSGbx9df__0C2m7X3vGNbdKnpo,5858
|
|
243
242
|
parsl/tests/configs/workqueue_ex.py,sha256=c-vKc1MHmU9IyIyZGuxIPKfg93lKBeNnEoWBKjoIRcg,389
|
|
244
243
|
parsl/tests/integration/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -280,7 +279,7 @@ parsl/tests/test_bash_apps/test_pipeline.py,sha256=1kQDD8-Dh5H9SKFcKHzN_mSrdxAV_
|
|
|
280
279
|
parsl/tests/test_bash_apps/test_std_uri.py,sha256=CvAt8BUhNl2pA5chq9YyhkD6eo2IUH6PjWfe3SQ-YRU,3752
|
|
281
280
|
parsl/tests/test_bash_apps/test_stdout.py,sha256=lNBzCJGst0IhKaSl8CM8-mTJ5eaK7hTlZ8gY-M2TDBU,3244
|
|
282
281
|
parsl/tests/test_checkpointing/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
283
|
-
parsl/tests/test_checkpointing/test_periodic.py,sha256=
|
|
282
|
+
parsl/tests/test_checkpointing/test_periodic.py,sha256=92mHbznqkA1R3RDU7q_am1QH5jyuK--Ff6lyLdy1jeU,1732
|
|
284
283
|
parsl/tests/test_checkpointing/test_python_checkpoint_1.py,sha256=bi7c6fy6P7jmrMQkQP5me-LTfwVwJGq1O9BjnmdDIKc,715
|
|
285
284
|
parsl/tests/test_checkpointing/test_python_checkpoint_2.py,sha256=Q_cXeAVz_dJuDDeiemUIGd-wmb7aCY3ggpqYjRRhHRc,1089
|
|
286
285
|
parsl/tests/test_checkpointing/test_regression_232.py,sha256=AsI6AJ0DcFaefAbEY9qWa41ER0VX-4yLuIdlgvBw360,2637
|
|
@@ -314,13 +313,13 @@ parsl/tests/test_htex/test_disconnected_blocks.py,sha256=3V1Ol9gMS6knjLTgIjB5Gru
|
|
|
314
313
|
parsl/tests/test_htex/test_disconnected_blocks_failing_provider.py,sha256=eOdipRpKMOkWAXB3UtY1UjqTiwfNs_csNLve8vllG_M,2040
|
|
315
314
|
parsl/tests/test_htex/test_drain.py,sha256=gYA7qzbv5ozox3clVdW0rlxAzwa_f_P0kqsAez3tIfk,2370
|
|
316
315
|
parsl/tests/test_htex/test_htex.py,sha256=J1uEGezic8ziPPZsQwfK9iNiTJ53NqXMhIg9CUunjZw,4901
|
|
317
|
-
parsl/tests/test_htex/test_interchange_exit_bad_registration.py,sha256=
|
|
316
|
+
parsl/tests/test_htex/test_interchange_exit_bad_registration.py,sha256=n6M-GSI4lPDPlkl6QLDxQnT2ZHIf6cu0C1EMIBGNNbs,4532
|
|
318
317
|
parsl/tests/test_htex/test_manager_failure.py,sha256=N-obuSZ8f7XA_XcddoN2LWKSVtpKUZvTHb7BFelS3iQ,1143
|
|
319
318
|
parsl/tests/test_htex/test_manager_selector_by_block.py,sha256=VQqSE6MDhGpDSjShGUTbj7l9Ahuj2tC9qD--o4puF44,1310
|
|
320
319
|
parsl/tests/test_htex/test_managers_command.py,sha256=SCwkfyGB-Udgu5L2yDMpR5bsaT-aNjNkiXxtuRb25DI,1622
|
|
321
320
|
parsl/tests/test_htex/test_missing_worker.py,sha256=gyp5i7_t-JHyJGtz_eXZKKBY5w8oqLOIxO6cJgGJMtQ,745
|
|
322
321
|
parsl/tests/test_htex/test_multiple_disconnected_blocks.py,sha256=2vXZoIx4NuAWYuiNoL5Gxr85w72qZ7Kdb3JGh0FufTg,1867
|
|
323
|
-
parsl/tests/test_htex/test_priority_queue.py,sha256=
|
|
322
|
+
parsl/tests/test_htex/test_priority_queue.py,sha256=sAs9W4I0LsmvPpuN9Q66yRY4zoSOEo0eMFh6DXlih0I,2336
|
|
324
323
|
parsl/tests/test_htex/test_resource_spec_validation.py,sha256=ZXW02jDd1rNxjBLh1jHyiz31zNoB9JzDw94aWllXFd4,1102
|
|
325
324
|
parsl/tests/test_htex/test_worker_failure.py,sha256=Uz-RHI-LK78FMjXUvrUFmo4iYfmpDVBUcBxxRb3UG9M,603
|
|
326
325
|
parsl/tests/test_htex/test_zmq_binding.py,sha256=SmX_63vvXKnzWISBr8HnJCrRqubx7K0blvgjq4Px2gc,4391
|
|
@@ -343,7 +342,7 @@ parsl/tests/test_mpi_apps/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJW
|
|
|
343
342
|
parsl/tests/test_mpi_apps/test_bad_mpi_config.py,sha256=QKvEUSrHIBrvqu2fRj1MAqxsYxDfcrdQ7dzWdOZejuU,1320
|
|
344
343
|
parsl/tests/test_mpi_apps/test_mpi_mode_enabled.py,sha256=_fpiaDq9yEUuBxTiuxLFsBt5r1oX9S-3S-YL5yRB13E,5423
|
|
345
344
|
parsl/tests/test_mpi_apps/test_mpi_prefix.py,sha256=yJslZvYK3JeL9UgxMwF9DDPR9QD4zJLGVjubD0F-utc,1950
|
|
346
|
-
parsl/tests/test_mpi_apps/test_mpi_scheduler.py,sha256=
|
|
345
|
+
parsl/tests/test_mpi_apps/test_mpi_scheduler.py,sha256=ePjidjiMYhDoy-iUsqU13Qb5QPBFzLayKrMyNRkoR6I,5619
|
|
347
346
|
parsl/tests/test_mpi_apps/test_mpiex.py,sha256=mlFdHK3A1B6NsEhxTQQX8lhs9qVza36FMG99vNrBRW4,2021
|
|
348
347
|
parsl/tests/test_mpi_apps/test_resource_spec.py,sha256=5k6HM2jtb6sa7jetpI-Tl1nPQiN33VLaM7YT10c307E,3756
|
|
349
348
|
parsl/tests/test_providers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -394,6 +393,7 @@ parsl/tests/test_regression/test_1653.py,sha256=eMXPfTALwQ7k2pGpar-kYed8yKtOj2U2
|
|
|
394
393
|
parsl/tests/test_regression/test_221.py,sha256=jOS0EVu_2sbh10eg5hnivPvhNt0my_50vQ7jQYS1Bfg,520
|
|
395
394
|
parsl/tests/test_regression/test_226.py,sha256=tVqGAU99RRQqz9KuMgeLVoddot2pRqG2y4daW44RrlE,1110
|
|
396
395
|
parsl/tests/test_regression/test_2652.py,sha256=R_ZoX7Vgz4H2ionhjm_KWFW-vWt_MlgWV_zdTsT68M0,848
|
|
396
|
+
parsl/tests/test_regression/test_3874.py,sha256=8MCxwyh9CXuB7tDgaHg6goclq6Hhrh_ryaQuKLLiLgU,1171
|
|
397
397
|
parsl/tests/test_regression/test_69a.py,sha256=sRkMT95b7WvFAK1hUy7eNwKnzFNqaX9qESdNmoh0rAo,1902
|
|
398
398
|
parsl/tests/test_regression/test_97_parallelism_0.py,sha256=Fe58KFhQpZuU982IP9ZSpKBb_Jpftv9pJjH73f8_ec8,1592
|
|
399
399
|
parsl/tests/test_regression/test_98.py,sha256=E7dituuonKN5uWocZkJYZlaE5x5rDM4MZlv2PloAKzY,452
|
|
@@ -412,7 +412,6 @@ parsl/tests/test_serialization/test_2555_caching_deserializer.py,sha256=jEXJvbri
|
|
|
412
412
|
parsl/tests/test_serialization/test_3495_deserialize_managerlost.py,sha256=GoMtK6BmARicawzYR2eQj5jUSL9RZ_tHV3g19BdQuQ8,1144
|
|
413
413
|
parsl/tests/test_serialization/test_basic.py,sha256=4_1Rkq5tNl9EC0nfneF8kHTws7I0E6ovE_0DE97BEfU,544
|
|
414
414
|
parsl/tests/test_serialization/test_htex_code_cache.py,sha256=dd0XwlNDn6Lgj6-nHHjYWzl1FnhFLY_8Buxj77dyZ28,1840
|
|
415
|
-
parsl/tests/test_serialization/test_pack_resource_spec.py,sha256=-Vtyh8KyezZw8e7M2Z4m3LawY1Au4U-H3KRmVKXSut0,641
|
|
416
415
|
parsl/tests/test_serialization/test_proxystore_configured.py,sha256=lGWOSEWul16enDWhW-s7CK0d3eMDzm1324Fmj0cZMVU,2293
|
|
417
416
|
parsl/tests/test_serialization/test_proxystore_impl.py,sha256=uGd45sfPm9rJhzqKV0rI3lqdSOAUddQf-diEpcJAlcY,1228
|
|
418
417
|
parsl/tests/test_shutdown/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -452,13 +451,13 @@ parsl/usage_tracking/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hS
|
|
|
452
451
|
parsl/usage_tracking/api.py,sha256=iaCY58Dc5J4UM7_dJzEEs871P1p1HdxBMtNGyVdzc9g,1821
|
|
453
452
|
parsl/usage_tracking/levels.py,sha256=xbfzYEsd55KiZJ-mzNgPebvOH4rRHum04hROzEf41tU,291
|
|
454
453
|
parsl/usage_tracking/usage.py,sha256=hbMo5BYgIWqMcFWqN-HYP1TbwNrTonpv-usfwnCFJKY,9212
|
|
455
|
-
parsl-2025.9.
|
|
456
|
-
parsl-2025.9.
|
|
457
|
-
parsl-2025.9.
|
|
458
|
-
parsl-2025.9.
|
|
459
|
-
parsl-2025.9.
|
|
460
|
-
parsl-2025.9.
|
|
461
|
-
parsl-2025.9.
|
|
462
|
-
parsl-2025.9.
|
|
463
|
-
parsl-2025.9.
|
|
464
|
-
parsl-2025.9.
|
|
454
|
+
parsl-2025.9.29.data/scripts/exec_parsl_function.py,sha256=YXKVVIa4zXmOtz-0Ca4E_5nQfN_3S2bh2tB75uZZB4w,7774
|
|
455
|
+
parsl-2025.9.29.data/scripts/interchange.py,sha256=Kn0yJnpcRsc37gfhD6mGkoX9wD7vP_QgWst7qwUjj5o,26145
|
|
456
|
+
parsl-2025.9.29.data/scripts/parsl_coprocess.py,sha256=zrVjEqQvFOHxsLufPi00xzMONagjVwLZbavPM7bbjK4,5722
|
|
457
|
+
parsl-2025.9.29.data/scripts/process_worker_pool.py,sha256=RXV_w5O2XSb_ySJOXacGQlrR6-HdPuNkGMcaiR93i4M,40849
|
|
458
|
+
parsl-2025.9.29.dist-info/LICENSE,sha256=tAkwu8-AdEyGxGoSvJ2gVmQdcicWw3j1ZZueVV74M-E,11357
|
|
459
|
+
parsl-2025.9.29.dist-info/METADATA,sha256=pWkSrPV2137jfgCpUVJYaoh-o0ZOk0O0SADK2rk9ubA,4006
|
|
460
|
+
parsl-2025.9.29.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
|
|
461
|
+
parsl-2025.9.29.dist-info/entry_points.txt,sha256=XqnsWDYoEcLbsMcpnYGKLEnSBmaIe1YoM5YsBdJG2tI,176
|
|
462
|
+
parsl-2025.9.29.dist-info/top_level.txt,sha256=PIheYoUFQtF2icLsgOykgU-Cjuwr2Oi6On2jo5RYgRM,6
|
|
463
|
+
parsl-2025.9.29.dist-info/RECORD,,
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
from parsl.config import Config
|
|
2
|
-
from parsl.executors.threads import ThreadPoolExecutor
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
def fresh_config():
|
|
6
|
-
tpe = ThreadPoolExecutor(label='local_threads_checkpoint_periodic', max_threads=1)
|
|
7
|
-
return Config(
|
|
8
|
-
executors=[tpe],
|
|
9
|
-
checkpoint_mode='periodic',
|
|
10
|
-
checkpoint_period='00:00:02'
|
|
11
|
-
)
|