parsl 2024.9.30__py3-none-any.whl → 2024.10.14__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/executors/errors.py +13 -0
- parsl/executors/high_throughput/executor.py +7 -8
- parsl/executors/high_throughput/interchange.py +1 -19
- parsl/executors/high_throughput/mpi_prefix_composer.py +5 -23
- parsl/executors/threads.py +3 -2
- parsl/executors/workqueue/executor.py +6 -5
- parsl/tests/configs/htex_local_alternate.py +2 -1
- parsl/tests/conftest.py +1 -1
- parsl/tests/test_error_handling/test_resource_spec.py +10 -14
- parsl/tests/test_htex/test_resource_spec_validation.py +1 -3
- parsl/tests/test_mpi_apps/test_mpi_mode_enabled.py +2 -4
- parsl/tests/test_mpi_apps/test_resource_spec.py +2 -5
- parsl/version.py +1 -1
- {parsl-2024.9.30.data → parsl-2024.10.14.data}/scripts/interchange.py +1 -19
- {parsl-2024.9.30.dist-info → parsl-2024.10.14.dist-info}/METADATA +3 -4
- {parsl-2024.9.30.dist-info → parsl-2024.10.14.dist-info}/RECORD +23 -23
- {parsl-2024.9.30.data → parsl-2024.10.14.data}/scripts/exec_parsl_function.py +0 -0
- {parsl-2024.9.30.data → parsl-2024.10.14.data}/scripts/parsl_coprocess.py +0 -0
- {parsl-2024.9.30.data → parsl-2024.10.14.data}/scripts/process_worker_pool.py +0 -0
- {parsl-2024.9.30.dist-info → parsl-2024.10.14.dist-info}/LICENSE +0 -0
- {parsl-2024.9.30.dist-info → parsl-2024.10.14.dist-info}/WHEEL +0 -0
- {parsl-2024.9.30.dist-info → parsl-2024.10.14.dist-info}/entry_points.txt +0 -0
- {parsl-2024.9.30.dist-info → parsl-2024.10.14.dist-info}/top_level.txt +0 -0
parsl/executors/errors.py
CHANGED
@@ -1,4 +1,6 @@
|
|
1
1
|
"""Exceptions raise by Executors."""
|
2
|
+
from typing import Set
|
3
|
+
|
2
4
|
from parsl.errors import ParslError
|
3
5
|
from parsl.executors.base import ParslExecutor
|
4
6
|
|
@@ -44,6 +46,17 @@ class UnsupportedFeatureError(ExecutorError):
|
|
44
46
|
self.current_executor)
|
45
47
|
|
46
48
|
|
49
|
+
class InvalidResourceSpecification(ExecutorError):
|
50
|
+
"""Error raised when Invalid input is supplied via resource Specification"""
|
51
|
+
|
52
|
+
def __init__(self, invalid_keys: Set[str], message: str = ''):
|
53
|
+
self.invalid_keys = invalid_keys
|
54
|
+
self.message = message
|
55
|
+
|
56
|
+
def __str__(self):
|
57
|
+
return f"Invalid Resource Specification Supplied: {self.invalid_keys}. {self.message}"
|
58
|
+
|
59
|
+
|
47
60
|
class ScalingFailed(ExecutorError):
|
48
61
|
"""Scaling failed due to error in Execution provider."""
|
49
62
|
|
@@ -16,16 +16,17 @@ from parsl import curvezmq
|
|
16
16
|
from parsl.addresses import get_all_addresses
|
17
17
|
from parsl.app.errors import RemoteExceptionWrapper
|
18
18
|
from parsl.data_provider.staging import Staging
|
19
|
-
from parsl.executors.errors import
|
19
|
+
from parsl.executors.errors import (
|
20
|
+
BadMessage,
|
21
|
+
InvalidResourceSpecification,
|
22
|
+
ScalingFailed,
|
23
|
+
)
|
20
24
|
from parsl.executors.high_throughput import zmq_pipes
|
21
25
|
from parsl.executors.high_throughput.errors import CommandClientTimeoutError
|
22
26
|
from parsl.executors.high_throughput.manager_selector import (
|
23
27
|
ManagerSelector,
|
24
28
|
RandomManagerSelector,
|
25
29
|
)
|
26
|
-
from parsl.executors.high_throughput.mpi_prefix_composer import (
|
27
|
-
InvalidResourceSpecification,
|
28
|
-
)
|
29
30
|
from parsl.executors.status_handling import BlockProviderExecutor
|
30
31
|
from parsl.jobs.states import TERMINAL_STATES, JobState, JobStatus
|
31
32
|
from parsl.process_loggers import wrap_with_logs
|
@@ -459,9 +460,7 @@ class HighThroughputExecutor(BlockProviderExecutor, RepresentationMixin, UsageIn
|
|
459
460
|
except pickle.UnpicklingError:
|
460
461
|
raise BadMessage("Message received could not be unpickled")
|
461
462
|
|
462
|
-
if msg['type'] == '
|
463
|
-
continue
|
464
|
-
elif msg['type'] == 'result':
|
463
|
+
if msg['type'] == 'result':
|
465
464
|
try:
|
466
465
|
tid = msg['task_id']
|
467
466
|
except Exception:
|
@@ -581,7 +580,7 @@ class HighThroughputExecutor(BlockProviderExecutor, RepresentationMixin, UsageIn
|
|
581
580
|
def outstanding(self) -> int:
|
582
581
|
"""Returns the count of tasks outstanding across the interchange
|
583
582
|
and managers"""
|
584
|
-
return self.
|
583
|
+
return len(self.tasks)
|
585
584
|
|
586
585
|
@property
|
587
586
|
def connected_workers(self) -> int:
|
@@ -6,7 +6,6 @@ import os
|
|
6
6
|
import pickle
|
7
7
|
import platform
|
8
8
|
import queue
|
9
|
-
import signal
|
10
9
|
import sys
|
11
10
|
import threading
|
12
11
|
import time
|
@@ -252,13 +251,7 @@ class Interchange:
|
|
252
251
|
try:
|
253
252
|
command_req = self.command_channel.recv_pyobj()
|
254
253
|
logger.debug("Received command request: {}".format(command_req))
|
255
|
-
if command_req == "
|
256
|
-
outstanding = self.pending_task_queue.qsize()
|
257
|
-
for manager in self._ready_managers.values():
|
258
|
-
outstanding += len(manager['tasks'])
|
259
|
-
reply = outstanding
|
260
|
-
|
261
|
-
elif command_req == "CONNECTED_BLOCKS":
|
254
|
+
if command_req == "CONNECTED_BLOCKS":
|
262
255
|
reply = self.connected_block_history
|
263
256
|
|
264
257
|
elif command_req == "WORKERS":
|
@@ -319,16 +312,6 @@ class Interchange:
|
|
319
312
|
""" Start the interchange
|
320
313
|
"""
|
321
314
|
|
322
|
-
# If a user workflow has set its own signal handler for sigterm, that
|
323
|
-
# handler will be inherited by the interchange process because it is
|
324
|
-
# launched as a multiprocessing fork process.
|
325
|
-
# That can interfere with the interchange shutdown mechanism, which is
|
326
|
-
# to receive a SIGTERM and exit immediately.
|
327
|
-
# See Parsl issue #2343 (Threads and multiprocessing cannot be
|
328
|
-
# intermingled without deadlocks) which talks about other fork-related
|
329
|
-
# parent-process-inheritance problems.
|
330
|
-
signal.signal(signal.SIGTERM, signal.SIG_DFL)
|
331
|
-
|
332
315
|
logger.info("Starting main interchange method")
|
333
316
|
|
334
317
|
if self.hub_address is not None and self.hub_zmq_port is not None:
|
@@ -549,7 +532,6 @@ class Interchange:
|
|
549
532
|
monitoring_radio.send(r['payload'])
|
550
533
|
elif r['type'] == 'heartbeat':
|
551
534
|
logger.debug("Manager %r sent heartbeat via results connection", manager_id)
|
552
|
-
b_messages.append((p_message, r))
|
553
535
|
else:
|
554
536
|
logger.error("Interchange discarding result_queue message of unknown type: %s", r["type"])
|
555
537
|
|
@@ -1,5 +1,7 @@
|
|
1
1
|
import logging
|
2
|
-
from typing import Dict, List,
|
2
|
+
from typing import Dict, List, Tuple
|
3
|
+
|
4
|
+
from parsl.executors.errors import InvalidResourceSpecification
|
3
5
|
|
4
6
|
logger = logging.getLogger(__name__)
|
5
7
|
|
@@ -8,27 +10,6 @@ VALID_LAUNCHERS = ('srun',
|
|
8
10
|
'mpiexec')
|
9
11
|
|
10
12
|
|
11
|
-
class MissingResourceSpecification(Exception):
|
12
|
-
"""Exception raised when input is not supplied a resource specification"""
|
13
|
-
|
14
|
-
def __init__(self, reason: str):
|
15
|
-
self.reason = reason
|
16
|
-
|
17
|
-
def __str__(self):
|
18
|
-
return f"Missing resource specification: {self.reason}"
|
19
|
-
|
20
|
-
|
21
|
-
class InvalidResourceSpecification(Exception):
|
22
|
-
"""Exception raised when Invalid input is supplied via resource specification"""
|
23
|
-
|
24
|
-
def __init__(self, invalid_keys: Set[str], message: str = ''):
|
25
|
-
self.invalid_keys = invalid_keys
|
26
|
-
self.message = message
|
27
|
-
|
28
|
-
def __str__(self):
|
29
|
-
return f"Invalid resource specification options supplied: {self.invalid_keys} {self.message}"
|
30
|
-
|
31
|
-
|
32
13
|
def validate_resource_spec(resource_spec: Dict[str, str]):
|
33
14
|
"""Basic validation of keys in the resource_spec
|
34
15
|
|
@@ -40,7 +21,8 @@ def validate_resource_spec(resource_spec: Dict[str, str]):
|
|
40
21
|
# empty resource_spec when mpi_mode is set causes parsl to hang
|
41
22
|
# ref issue #3427
|
42
23
|
if len(user_keys) == 0:
|
43
|
-
raise
|
24
|
+
raise InvalidResourceSpecification(user_keys,
|
25
|
+
'MPI mode requires optional parsl_resource_specification keyword argument to be configured')
|
44
26
|
|
45
27
|
legal_keys = set(("ranks_per_node",
|
46
28
|
"num_nodes",
|
parsl/executors/threads.py
CHANGED
@@ -6,7 +6,7 @@ import typeguard
|
|
6
6
|
|
7
7
|
from parsl.data_provider.staging import Staging
|
8
8
|
from parsl.executors.base import ParslExecutor
|
9
|
-
from parsl.executors.errors import
|
9
|
+
from parsl.executors.errors import InvalidResourceSpecification
|
10
10
|
from parsl.utils import RepresentationMixin
|
11
11
|
|
12
12
|
logger = logging.getLogger(__name__)
|
@@ -54,7 +54,8 @@ class ThreadPoolExecutor(ParslExecutor, RepresentationMixin):
|
|
54
54
|
if resource_specification:
|
55
55
|
logger.error("Ignoring the resource specification. "
|
56
56
|
"Parsl resource specification is not supported in ThreadPool Executor.")
|
57
|
-
raise
|
57
|
+
raise InvalidResourceSpecification(set(resource_specification.keys()),
|
58
|
+
"Parsl resource specification is not supported in ThreadPool Executor.")
|
58
59
|
|
59
60
|
return self.executor.submit(func, *args, **kwargs)
|
60
61
|
|
@@ -28,7 +28,7 @@ import parsl.utils as putils
|
|
28
28
|
from parsl.data_provider.files import File
|
29
29
|
from parsl.data_provider.staging import Staging
|
30
30
|
from parsl.errors import OptionalModuleMissing
|
31
|
-
from parsl.executors.errors import ExecutorError
|
31
|
+
from parsl.executors.errors import ExecutorError, InvalidResourceSpecification
|
32
32
|
from parsl.executors.status_handling import BlockProviderExecutor
|
33
33
|
from parsl.executors.workqueue import exec_parsl_function
|
34
34
|
from parsl.process_loggers import wrap_with_logs
|
@@ -419,7 +419,7 @@ class WorkQueueExecutor(BlockProviderExecutor, putils.RepresentationMixin):
|
|
419
419
|
message = "Task resource specification only accepts these types of resources: {}".format(
|
420
420
|
', '.join(acceptable_fields))
|
421
421
|
logger.error(message)
|
422
|
-
raise
|
422
|
+
raise InvalidResourceSpecification(keys, message)
|
423
423
|
|
424
424
|
# this checks that either all of the required resource types are specified, or
|
425
425
|
# that none of them are: the `required_resource_types` are not actually required,
|
@@ -430,9 +430,10 @@ class WorkQueueExecutor(BlockProviderExecutor, putils.RepresentationMixin):
|
|
430
430
|
logger.error("Running with `autolabel=False`. In this mode, "
|
431
431
|
"task resource specification requires "
|
432
432
|
"three resources to be specified simultaneously: cores, memory, and disk")
|
433
|
-
raise
|
434
|
-
|
435
|
-
|
433
|
+
raise InvalidResourceSpecification(keys,
|
434
|
+
"Task resource specification requires "
|
435
|
+
"three resources to be specified simultaneously: cores, memory, and disk. "
|
436
|
+
"Try setting autolabel=True if you are unsure of the resource usage")
|
436
437
|
|
437
438
|
for k in keys:
|
438
439
|
if k == 'cores':
|
parsl/tests/conftest.py
CHANGED
@@ -58,7 +58,7 @@ def tmpd_cwd_session(pytestconfig):
|
|
58
58
|
|
59
59
|
config = re.sub(r"[^A-z0-9_-]+", "_", pytestconfig.getoption('config')[0])
|
60
60
|
cwd = pathlib.Path(os.getcwd())
|
61
|
-
pytest_dir = cwd / "
|
61
|
+
pytest_dir = cwd / "pytest-parsl"
|
62
62
|
pytest_dir.mkdir(mode=0o700, parents=True, exist_ok=True)
|
63
63
|
|
64
64
|
test_dir_prefix = "parsltest-"
|
@@ -1,11 +1,9 @@
|
|
1
1
|
import parsl
|
2
2
|
from parsl.app.app import python_app
|
3
3
|
from parsl.executors import WorkQueueExecutor
|
4
|
-
from parsl.executors.errors import
|
4
|
+
from parsl.executors.errors import InvalidResourceSpecification
|
5
5
|
from parsl.executors.high_throughput.executor import HighThroughputExecutor
|
6
|
-
from parsl.executors.
|
7
|
-
InvalidResourceSpecification,
|
8
|
-
)
|
6
|
+
from parsl.executors.threads import ThreadPoolExecutor
|
9
7
|
|
10
8
|
|
11
9
|
@python_app
|
@@ -27,11 +25,10 @@ def test_resource(n=2):
|
|
27
25
|
try:
|
28
26
|
fut.result()
|
29
27
|
except InvalidResourceSpecification:
|
30
|
-
assert
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
assert isinstance(e, ExecutorError)
|
28
|
+
assert (
|
29
|
+
isinstance(executor, HighThroughputExecutor) or
|
30
|
+
isinstance(executor, WorkQueueExecutor) or
|
31
|
+
isinstance(executor, ThreadPoolExecutor))
|
35
32
|
|
36
33
|
# Specify resources with wrong types
|
37
34
|
# 'cpus' is incorrect, should be 'cores'
|
@@ -40,8 +37,7 @@ def test_resource(n=2):
|
|
40
37
|
try:
|
41
38
|
fut.result()
|
42
39
|
except InvalidResourceSpecification:
|
43
|
-
assert
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
assert isinstance(e, ExecutorError)
|
40
|
+
assert (
|
41
|
+
isinstance(executor, HighThroughputExecutor) or
|
42
|
+
isinstance(executor, WorkQueueExecutor) or
|
43
|
+
isinstance(executor, ThreadPoolExecutor))
|
@@ -4,9 +4,7 @@ from unittest import mock
|
|
4
4
|
import pytest
|
5
5
|
|
6
6
|
from parsl.executors import HighThroughputExecutor
|
7
|
-
from parsl.executors.
|
8
|
-
InvalidResourceSpecification,
|
9
|
-
)
|
7
|
+
from parsl.executors.errors import InvalidResourceSpecification
|
10
8
|
|
11
9
|
|
12
10
|
def double(x):
|
@@ -8,9 +8,7 @@ import pytest
|
|
8
8
|
import parsl
|
9
9
|
from parsl import Config, bash_app, python_app
|
10
10
|
from parsl.executors import MPIExecutor
|
11
|
-
from parsl.executors.
|
12
|
-
MissingResourceSpecification,
|
13
|
-
)
|
11
|
+
from parsl.executors.errors import InvalidResourceSpecification
|
14
12
|
from parsl.launchers import SimpleLauncher
|
15
13
|
from parsl.providers import LocalProvider
|
16
14
|
|
@@ -185,6 +183,6 @@ def test_simulated_load(rounds: int = 100):
|
|
185
183
|
@pytest.mark.local
|
186
184
|
def test_missing_resource_spec():
|
187
185
|
|
188
|
-
with pytest.raises(
|
186
|
+
with pytest.raises(InvalidResourceSpecification):
|
189
187
|
future = mock_app(sleep_dur=0.4)
|
190
188
|
future.result(timeout=10)
|
@@ -10,12 +10,9 @@ from unittest import mock
|
|
10
10
|
import pytest
|
11
11
|
|
12
12
|
from parsl.app.app import python_app
|
13
|
+
from parsl.executors.errors import InvalidResourceSpecification
|
13
14
|
from parsl.executors.high_throughput.executor import HighThroughputExecutor
|
14
15
|
from parsl.executors.high_throughput.mpi_executor import MPIExecutor
|
15
|
-
from parsl.executors.high_throughput.mpi_prefix_composer import (
|
16
|
-
InvalidResourceSpecification,
|
17
|
-
MissingResourceSpecification,
|
18
|
-
)
|
19
16
|
from parsl.executors.high_throughput.mpi_resource_management import (
|
20
17
|
get_nodes_in_batchjob,
|
21
18
|
get_pbs_hosts_list,
|
@@ -105,7 +102,7 @@ def test_top_level():
|
|
105
102
|
({"num_nodes": 2, "ranks_per_node": 1}, None),
|
106
103
|
({"launcher_options": "--debug_foo"}, None),
|
107
104
|
({"num_nodes": 2, "BAD_OPT": 1}, InvalidResourceSpecification),
|
108
|
-
({},
|
105
|
+
({}, InvalidResourceSpecification),
|
109
106
|
)
|
110
107
|
)
|
111
108
|
def test_mpi_resource_spec(resource_spec: Dict, exception):
|
parsl/version.py
CHANGED
@@ -6,7 +6,6 @@ import os
|
|
6
6
|
import pickle
|
7
7
|
import platform
|
8
8
|
import queue
|
9
|
-
import signal
|
10
9
|
import sys
|
11
10
|
import threading
|
12
11
|
import time
|
@@ -252,13 +251,7 @@ class Interchange:
|
|
252
251
|
try:
|
253
252
|
command_req = self.command_channel.recv_pyobj()
|
254
253
|
logger.debug("Received command request: {}".format(command_req))
|
255
|
-
if command_req == "
|
256
|
-
outstanding = self.pending_task_queue.qsize()
|
257
|
-
for manager in self._ready_managers.values():
|
258
|
-
outstanding += len(manager['tasks'])
|
259
|
-
reply = outstanding
|
260
|
-
|
261
|
-
elif command_req == "CONNECTED_BLOCKS":
|
254
|
+
if command_req == "CONNECTED_BLOCKS":
|
262
255
|
reply = self.connected_block_history
|
263
256
|
|
264
257
|
elif command_req == "WORKERS":
|
@@ -319,16 +312,6 @@ class Interchange:
|
|
319
312
|
""" Start the interchange
|
320
313
|
"""
|
321
314
|
|
322
|
-
# If a user workflow has set its own signal handler for sigterm, that
|
323
|
-
# handler will be inherited by the interchange process because it is
|
324
|
-
# launched as a multiprocessing fork process.
|
325
|
-
# That can interfere with the interchange shutdown mechanism, which is
|
326
|
-
# to receive a SIGTERM and exit immediately.
|
327
|
-
# See Parsl issue #2343 (Threads and multiprocessing cannot be
|
328
|
-
# intermingled without deadlocks) which talks about other fork-related
|
329
|
-
# parent-process-inheritance problems.
|
330
|
-
signal.signal(signal.SIGTERM, signal.SIG_DFL)
|
331
|
-
|
332
315
|
logger.info("Starting main interchange method")
|
333
316
|
|
334
317
|
if self.hub_address is not None and self.hub_zmq_port is not None:
|
@@ -549,7 +532,6 @@ class Interchange:
|
|
549
532
|
monitoring_radio.send(r['payload'])
|
550
533
|
elif r['type'] == 'heartbeat':
|
551
534
|
logger.debug("Manager %r sent heartbeat via results connection", manager_id)
|
552
|
-
b_messages.append((p_message, r))
|
553
535
|
else:
|
554
536
|
logger.error("Interchange discarding result_queue message of unknown type: %s", r["type"])
|
555
537
|
|
@@ -1,9 +1,9 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: parsl
|
3
|
-
Version: 2024.
|
3
|
+
Version: 2024.10.14
|
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.
|
6
|
+
Download-URL: https://github.com/Parsl/parsl/archive/2024.10.14.tar.gz
|
7
7
|
Author: The Parsl Team
|
8
8
|
Author-email: parsl@googlegroups.com
|
9
9
|
License: Apache 2.0
|
@@ -11,12 +11,11 @@ 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.8
|
15
14
|
Classifier: Programming Language :: Python :: 3.9
|
16
15
|
Classifier: Programming Language :: Python :: 3.10
|
17
16
|
Classifier: Programming Language :: Python :: 3.11
|
18
17
|
Classifier: Programming Language :: Python :: 3.12
|
19
|
-
Requires-Python: >=3.
|
18
|
+
Requires-Python: >=3.9.0
|
20
19
|
License-File: LICENSE
|
21
20
|
Requires-Dist: pyzmq>=17.1.2
|
22
21
|
Requires-Dist: typeguard!=3.*,<5,>=2.10
|
@@ -8,7 +8,7 @@ parsl/multiprocessing.py,sha256=MyaEcEq-Qf860u7V98u-PZrPNdtzOZL_NW6EhIJnmfQ,1937
|
|
8
8
|
parsl/process_loggers.py,sha256=uQ7Gd0W72Jz7rrcYlOMfLsAEhkRltxXJL2MgdduJjEw,1136
|
9
9
|
parsl/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
10
10
|
parsl/utils.py,sha256=91FjQiTUY383ueAjkBAgE21My9nba6SP2a2SrbB1r1Q,11250
|
11
|
-
parsl/version.py,sha256=
|
11
|
+
parsl/version.py,sha256=gXe4u5wct19WXUeUe498E2p6fv6jhUpyBFJ0x-XoQdM,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
|
@@ -71,22 +71,22 @@ parsl/dataflow/states.py,sha256=hV6mfv-y4A6xrujeQglcomnfEs7y3Xm2g6JFwC6dvgQ,2612
|
|
71
71
|
parsl/dataflow/taskrecord.py,sha256=-FuujdZQ1y5GSc-PJ91QKGT-Kp0lrg70MFDoxpbWI1Q,3113
|
72
72
|
parsl/executors/__init__.py,sha256=Cg8e-F2NUaBD8A9crDAXKCSdoBEwQVIdgm4FlXd-wvk,476
|
73
73
|
parsl/executors/base.py,sha256=5A59mCXPjYNCep9JgfvIjBdZvGV-1mNVHklr-ZIEojg,5200
|
74
|
-
parsl/executors/errors.py,sha256=
|
74
|
+
parsl/executors/errors.py,sha256=ZxL3nK5samPos8Xixo_jpRtPIiRJfZ5D397_qaXj2g0,2515
|
75
75
|
parsl/executors/status_handling.py,sha256=nxbkiGr6f3xDc0nsUeSrMMxlj7UD32K7nOLCLzfthDs,15416
|
76
|
-
parsl/executors/threads.py,sha256=
|
76
|
+
parsl/executors/threads.py,sha256=_LA5NA3GSvtjDend-1HVpjoDoNHHW13rAD0CET99fjQ,3463
|
77
77
|
parsl/executors/flux/__init__.py,sha256=P9grTTeRPXfqXurFhlSS7XhmE6tTbnCnyQ1f9b-oYHE,136
|
78
78
|
parsl/executors/flux/execute_parsl_task.py,sha256=gRN7F4HhdrKQ-bvn4wXrquBzFOp_9WF88hMIeUaRg5I,1553
|
79
79
|
parsl/executors/flux/executor.py,sha256=8_xakLUu5zNJAHL0LbeTCFEWqWzRK1eE-3ep4GIIIrY,17017
|
80
80
|
parsl/executors/flux/flux_instance_manager.py,sha256=5T3Rp7ZM-mlT0Pf0Gxgs5_YmnaPrSF9ec7zvRfLfYJw,2129
|
81
81
|
parsl/executors/high_throughput/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
82
82
|
parsl/executors/high_throughput/errors.py,sha256=Sak8e8UpiEcXefUjMHbhyXc4Rn7kJtOoh7L8wreBQdk,1638
|
83
|
-
parsl/executors/high_throughput/executor.py,sha256=
|
84
|
-
parsl/executors/high_throughput/interchange.py,sha256=
|
83
|
+
parsl/executors/high_throughput/executor.py,sha256=5UGCQR3OtTXXMMo7dm0n80HNc0iqZ30NlU7sLlAdTf8,37139
|
84
|
+
parsl/executors/high_throughput/interchange.py,sha256=elt48I-3WI4Wf5s7_3ECTw_fqqLPBDA2IzOiC4vqB14,29925
|
85
85
|
parsl/executors/high_throughput/manager_record.py,sha256=yn3L8TUJFkgm2lX1x0SeS9mkvJowC0s2VIMCFiU7ThM,455
|
86
86
|
parsl/executors/high_throughput/manager_selector.py,sha256=uRaEtcbDO2vXf8vjEcm7bfZVdeUlSPTRc3G4oFRO29M,820
|
87
87
|
parsl/executors/high_throughput/monitoring_info.py,sha256=HC0drp6nlXQpAop5PTUKNjdXMgtZVvrBL0JzZJebPP4,298
|
88
88
|
parsl/executors/high_throughput/mpi_executor.py,sha256=khvGz56A8zU8XAY-R4TtqqiJB8B10mkVTXD_9xtrXgo,4696
|
89
|
-
parsl/executors/high_throughput/mpi_prefix_composer.py,sha256=
|
89
|
+
parsl/executors/high_throughput/mpi_prefix_composer.py,sha256=DmpKugANNa1bdYlqQBLHkrFc15fJpefPPhW9hkAlh1s,4308
|
90
90
|
parsl/executors/high_throughput/mpi_resource_management.py,sha256=LFBbJ3BnzTcY_v-jNu30uoIB2Enk4cleN4ygY3dncjY,8194
|
91
91
|
parsl/executors/high_throughput/probe.py,sha256=TNpGTXb4_DEeg_h-LHu4zEKi1-hffboxvKcZUl2OZGk,2751
|
92
92
|
parsl/executors/high_throughput/process_worker_pool.py,sha256=3s-Ouo3ZEhod7hon8euyL37t1DbP5pSVjXyC23DSN_0,43075
|
@@ -107,7 +107,7 @@ parsl/executors/taskvine/utils.py,sha256=iSrIogeiauL3UNy_9tiZp1cBSNn6fIJkMYQRVi1
|
|
107
107
|
parsl/executors/workqueue/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
108
108
|
parsl/executors/workqueue/errors.py,sha256=XO2naYhAsHHyiOBH6hpObg3mPNDmvMoFqErsj0-v7jc,541
|
109
109
|
parsl/executors/workqueue/exec_parsl_function.py,sha256=RUkJ4JSJAjr7YyRZ58zhMdg8cR5dVV9odUl3AuzNf3k,7802
|
110
|
-
parsl/executors/workqueue/executor.py,sha256=
|
110
|
+
parsl/executors/workqueue/executor.py,sha256=_Jv35gRAzUjC-pyDrSs6sEOFc7MxOFJ5cvWXt9WGRwU,49969
|
111
111
|
parsl/executors/workqueue/parsl_coprocess.py,sha256=cF1UmTgVLoey6QzBcbYgEiEsRidSaFfuO54f1HFw_EM,5737
|
112
112
|
parsl/executors/workqueue/parsl_coprocess_stub.py,sha256=_bJmpPIgL42qM6bVzeEKt1Mn1trSP41rtJguXxPGfHI,735
|
113
113
|
parsl/jobs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -200,7 +200,7 @@ parsl/serialize/facade.py,sha256=SpKGSpI8PQb3hhxuKRJUYoQoq284t5np9ouTpogKmtU,679
|
|
200
200
|
parsl/serialize/proxystore.py,sha256=o-ha9QAvVhbN8y9S1itk3W0O75eyHYZw2AvB2xu5_Lg,1624
|
201
201
|
parsl/tests/__init__.py,sha256=VTtJzOzz_x6fWNh8IOnsgFqVbdiJShi2AZH21mcmID4,204
|
202
202
|
parsl/tests/callables_helper.py,sha256=ceP1YYsNtrZgKT6MAIvpgdccEjQ_CpFEOnZBGHKGOx0,30
|
203
|
-
parsl/tests/conftest.py,sha256=
|
203
|
+
parsl/tests/conftest.py,sha256=DjQDWyGFYWZ9uOMPMdEHFApwRgqzChSVZMdTugbLl6M,14810
|
204
204
|
parsl/tests/test_aalst_patterns.py,sha256=lNIxb7nIgh1yX7hR2fr_ck_mxYJxx8ASKK9zHUVqPno,9614
|
205
205
|
parsl/tests/test_callables.py,sha256=97vrIF1_hfDGd81FM1bhR6FemZMWFcALrH6pVHMTCt8,1974
|
206
206
|
parsl/tests/test_curvezmq.py,sha256=yyhlS4vmaZdMitiySoy4l_ih9H1bsPiN-tMdwIh3H20,12431
|
@@ -220,7 +220,7 @@ parsl/tests/configs/ec2_spot.py,sha256=NKDCKgKxYNOHGVLBl2DFfiUwkR6xQnyhNb_E04TBs
|
|
220
220
|
parsl/tests/configs/flux_local.py,sha256=xliKQfB5FFpfNHWYEHoA8FKOTVHFCXVhWNuKQ5VJNTk,182
|
221
221
|
parsl/tests/configs/frontera.py,sha256=VXaRcvsi9ZjqJHi71BbKXSJBuQXdhCzPxXKW7H3LRBI,1567
|
222
222
|
parsl/tests/configs/htex_local.py,sha256=o7Lxz1nErHpLNcH7vEEy9KyCNiEf6r3gpCrBmdQbh94,719
|
223
|
-
parsl/tests/configs/htex_local_alternate.py,sha256=
|
223
|
+
parsl/tests/configs/htex_local_alternate.py,sha256=JJN4OASr-RXsXuLGVS3ciCrcczf8VVzbuTDWn9Wu0g4,2577
|
224
224
|
parsl/tests/configs/htex_local_intask_staging.py,sha256=E7uZD_AIAbxavkw4VrVXlGG7k42YJZv2qluAO-W0VvI,886
|
225
225
|
parsl/tests/configs/htex_local_rsync_staging.py,sha256=cqTRcHLjqYnOL07Lb8ecTzQuzP-dWDpWdKhgtTwo-fU,940
|
226
226
|
parsl/tests/configs/local_adhoc.py,sha256=jlyDwwIm0uVuyDgKZCb3wa3k0IaqcYT0ErMhu_0N26s,509
|
@@ -323,7 +323,7 @@ parsl/tests/test_error_handling/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm
|
|
323
323
|
parsl/tests/test_error_handling/test_fail.py,sha256=xx4TGWfL7le4cQ9nvnUkrlmKQJkskhD0l_3W1xwZSEI,282
|
324
324
|
parsl/tests/test_error_handling/test_python_walltime.py,sha256=rdmGZHIkuann2Njt3i62odKJ0FaODGr7-L96rOXNVYg,950
|
325
325
|
parsl/tests/test_error_handling/test_rand_fail.py,sha256=crFg4GmwdDpvx49_7w5Xt2P7H2R_V9f6i1Ar-QkASuU,3864
|
326
|
-
parsl/tests/test_error_handling/test_resource_spec.py,sha256=
|
326
|
+
parsl/tests/test_error_handling/test_resource_spec.py,sha256=gUS_lN7CcvOh_GeMY8DtZTh6LhizPfrVrYAJpt9XSYM,1428
|
327
327
|
parsl/tests/test_error_handling/test_retries.py,sha256=zJ9D2hrvXQURnK2OIf5LfQFcSDVZ8rhdpp6peGccY7s,2372
|
328
328
|
parsl/tests/test_error_handling/test_retry_handler.py,sha256=8fMHffMBLhRyNreIqkrwamx9TYRZ498uVYNlkcbAoLU,1407
|
329
329
|
parsl/tests/test_error_handling/test_retry_handler_failure.py,sha256=GaGtZZCB9Wb7ieShqTrxUFEUSKy07ZZWytCY4Qixk9Y,552
|
@@ -343,7 +343,7 @@ parsl/tests/test_htex/test_manager_failure.py,sha256=N-obuSZ8f7XA_XcddoN2LWKSVtp
|
|
343
343
|
parsl/tests/test_htex/test_managers_command.py,sha256=Y-eUjtBzwW9erCYdph9bOesbkUvX8QUPqXt27DCgVS8,951
|
344
344
|
parsl/tests/test_htex/test_missing_worker.py,sha256=gyp5i7_t-JHyJGtz_eXZKKBY5w8oqLOIxO6cJgGJMtQ,745
|
345
345
|
parsl/tests/test_htex/test_multiple_disconnected_blocks.py,sha256=2vXZoIx4NuAWYuiNoL5Gxr85w72qZ7Kdb3JGh0FufTg,1867
|
346
|
-
parsl/tests/test_htex/test_resource_spec_validation.py,sha256=
|
346
|
+
parsl/tests/test_htex/test_resource_spec_validation.py,sha256=JqboQRRFV0tEfWrGOdYT9pHazsUjyZLbF7qqnLFS_-A,914
|
347
347
|
parsl/tests/test_htex/test_worker_failure.py,sha256=Uz-RHI-LK78FMjXUvrUFmo4iYfmpDVBUcBxxRb3UG9M,603
|
348
348
|
parsl/tests/test_htex/test_zmq_binding.py,sha256=Bq1HHuMxBE_AcaP1VZ-RqE4euCHO__Du05b2UZ5H1RA,3950
|
349
349
|
parsl/tests/test_monitoring/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -358,11 +358,11 @@ parsl/tests/test_monitoring/test_stdouterr.py,sha256=9FQSfiaMrOpoSwravZuEwmdgUgI
|
|
358
358
|
parsl/tests/test_monitoring/test_viz_colouring.py,sha256=83Qdmn3gM0j7IL6kPDcuIsp_nl4zj-liPijyIN632SY,592
|
359
359
|
parsl/tests/test_mpi_apps/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
360
360
|
parsl/tests/test_mpi_apps/test_bad_mpi_config.py,sha256=QKvEUSrHIBrvqu2fRj1MAqxsYxDfcrdQ7dzWdOZejuU,1320
|
361
|
-
parsl/tests/test_mpi_apps/test_mpi_mode_enabled.py,sha256=
|
361
|
+
parsl/tests/test_mpi_apps/test_mpi_mode_enabled.py,sha256=_fpiaDq9yEUuBxTiuxLFsBt5r1oX9S-3S-YL5yRB13E,5423
|
362
362
|
parsl/tests/test_mpi_apps/test_mpi_prefix.py,sha256=yJslZvYK3JeL9UgxMwF9DDPR9QD4zJLGVjubD0F-utc,1950
|
363
363
|
parsl/tests/test_mpi_apps/test_mpi_scheduler.py,sha256=YdV8A-m67DHk9wxgNpj69wwGEKrFGL20KAC1TzLke3c,6332
|
364
364
|
parsl/tests/test_mpi_apps/test_mpiex.py,sha256=mlFdHK3A1B6NsEhxTQQX8lhs9qVza36FMG99vNrBRW4,2021
|
365
|
-
parsl/tests/test_mpi_apps/test_resource_spec.py,sha256=
|
365
|
+
parsl/tests/test_mpi_apps/test_resource_spec.py,sha256=5k6HM2jtb6sa7jetpI-Tl1nPQiN33VLaM7YT10c307E,3756
|
366
366
|
parsl/tests/test_providers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
367
367
|
parsl/tests/test_providers/test_cobalt_deprecation_warning.py,sha256=UN2W6xJxuLx2euPqArORKFEU2VXez9_PYqq-0rZHanQ,391
|
368
368
|
parsl/tests/test_providers/test_local_provider.py,sha256=R96E1eWgHVkvOQ1Au9wj-gfdWKAqGc-qlygFuxpGFQ8,7160
|
@@ -462,13 +462,13 @@ parsl/usage_tracking/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hS
|
|
462
462
|
parsl/usage_tracking/api.py,sha256=iaCY58Dc5J4UM7_dJzEEs871P1p1HdxBMtNGyVdzc9g,1821
|
463
463
|
parsl/usage_tracking/levels.py,sha256=xbfzYEsd55KiZJ-mzNgPebvOH4rRHum04hROzEf41tU,291
|
464
464
|
parsl/usage_tracking/usage.py,sha256=tcoZ2OUjsQVakG8Uu9_HFuEdzpSHyt4JarSRcLGnSMw,8918
|
465
|
-
parsl-2024.
|
466
|
-
parsl-2024.
|
467
|
-
parsl-2024.
|
468
|
-
parsl-2024.
|
469
|
-
parsl-2024.
|
470
|
-
parsl-2024.
|
471
|
-
parsl-2024.
|
472
|
-
parsl-2024.
|
473
|
-
parsl-2024.
|
474
|
-
parsl-2024.
|
465
|
+
parsl-2024.10.14.data/scripts/exec_parsl_function.py,sha256=RUkJ4JSJAjr7YyRZ58zhMdg8cR5dVV9odUl3AuzNf3k,7802
|
466
|
+
parsl-2024.10.14.data/scripts/interchange.py,sha256=FcEEmcuMcuFBB_aNOLzaYr5w3Yw9zKJxhtKbIUPVfhI,29912
|
467
|
+
parsl-2024.10.14.data/scripts/parsl_coprocess.py,sha256=zrVjEqQvFOHxsLufPi00xzMONagjVwLZbavPM7bbjK4,5722
|
468
|
+
parsl-2024.10.14.data/scripts/process_worker_pool.py,sha256=78QKnV5KbY_vcteC6k60gpDE4wEk6hsciet_qzs9QoU,43061
|
469
|
+
parsl-2024.10.14.dist-info/LICENSE,sha256=tAkwu8-AdEyGxGoSvJ2gVmQdcicWw3j1ZZueVV74M-E,11357
|
470
|
+
parsl-2024.10.14.dist-info/METADATA,sha256=55XMvDQssnRcrcG_9HLlmZnoesuPf61N6Kl5wKHlhnY,4072
|
471
|
+
parsl-2024.10.14.dist-info/WHEEL,sha256=eOLhNAGa2EW3wWl_TU484h7q1UNgy0JXjjoqKoxAAQc,92
|
472
|
+
parsl-2024.10.14.dist-info/entry_points.txt,sha256=XqnsWDYoEcLbsMcpnYGKLEnSBmaIe1YoM5YsBdJG2tI,176
|
473
|
+
parsl-2024.10.14.dist-info/top_level.txt,sha256=PIheYoUFQtF2icLsgOykgU-Cjuwr2Oi6On2jo5RYgRM,6
|
474
|
+
parsl-2024.10.14.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|