parsl 2024.8.5__py3-none-any.whl → 2024.8.12__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- parsl/channels/__init__.py +1 -4
- parsl/channels/oauth_ssh/oauth_ssh.py +2 -2
- parsl/channels/ssh/ssh.py +1 -1
- parsl/channels/ssh_il/ssh_il.py +2 -2
- parsl/dataflow/dflow.py +1 -1
- parsl/executors/high_throughput/executor.py +2 -1
- parsl/executors/high_throughput/interchange.py +4 -0
- parsl/executors/taskvine/executor.py +2 -0
- parsl/executors/workqueue/executor.py +2 -0
- parsl/monitoring/db_manager.py +10 -10
- parsl/monitoring/monitoring.py +1 -2
- parsl/monitoring/remote.py +4 -4
- parsl/monitoring/router.py +1 -6
- parsl/providers/__init__.py +0 -4
- parsl/providers/ad_hoc/ad_hoc.py +6 -2
- parsl/tests/configs/local_adhoc.py +2 -2
- parsl/tests/test_htex/test_zmq_binding.py +2 -1
- parsl/tests/test_providers/test_local_provider.py +6 -5
- parsl/version.py +1 -1
- {parsl-2024.8.5.data → parsl-2024.8.12.data}/scripts/interchange.py +4 -0
- {parsl-2024.8.5.dist-info → parsl-2024.8.12.dist-info}/METADATA +2 -2
- {parsl-2024.8.5.dist-info → parsl-2024.8.12.dist-info}/RECORD +29 -40
- parsl/configs/ad_hoc.py +0 -38
- parsl/tests/configs/ad_hoc_cluster_htex.py +0 -35
- parsl/tests/configs/htex_ad_hoc_cluster.py +0 -26
- parsl/tests/configs/swan_htex.py +0 -43
- parsl/tests/integration/test_channels/test_scp_1.py +0 -45
- parsl/tests/integration/test_channels/test_ssh_1.py +0 -40
- parsl/tests/integration/test_channels/test_ssh_errors.py +0 -46
- parsl/tests/integration/test_channels/test_ssh_file_transport.py +0 -41
- parsl/tests/integration/test_channels/test_ssh_interactive.py +0 -24
- parsl/tests/manual_tests/test_ad_hoc_htex.py +0 -49
- parsl/tests/manual_tests/test_oauth_ssh.py +0 -13
- {parsl-2024.8.5.data → parsl-2024.8.12.data}/scripts/exec_parsl_function.py +0 -0
- {parsl-2024.8.5.data → parsl-2024.8.12.data}/scripts/parsl_coprocess.py +0 -0
- {parsl-2024.8.5.data → parsl-2024.8.12.data}/scripts/process_worker_pool.py +0 -0
- {parsl-2024.8.5.dist-info → parsl-2024.8.12.dist-info}/LICENSE +0 -0
- {parsl-2024.8.5.dist-info → parsl-2024.8.12.dist-info}/WHEEL +0 -0
- {parsl-2024.8.5.dist-info → parsl-2024.8.12.dist-info}/entry_points.txt +0 -0
- {parsl-2024.8.5.dist-info → parsl-2024.8.12.dist-info}/top_level.txt +0 -0
parsl/channels/__init__.py
CHANGED
@@ -1,7 +1,4 @@
|
|
1
1
|
from parsl.channels.base import Channel
|
2
2
|
from parsl.channels.local.local import LocalChannel
|
3
|
-
from parsl.channels.oauth_ssh.oauth_ssh import OAuthSSHChannel
|
4
|
-
from parsl.channels.ssh.ssh import SSHChannel
|
5
|
-
from parsl.channels.ssh_il.ssh_il import SSHInteractiveLoginChannel
|
6
3
|
|
7
|
-
__all__ = ['Channel', '
|
4
|
+
__all__ = ['Channel', 'LocalChannel']
|
@@ -3,7 +3,7 @@ import socket
|
|
3
3
|
|
4
4
|
import paramiko
|
5
5
|
|
6
|
-
from parsl.channels.ssh.ssh import
|
6
|
+
from parsl.channels.ssh.ssh import DeprecatedSSHChannel
|
7
7
|
from parsl.errors import OptionalModuleMissing
|
8
8
|
|
9
9
|
try:
|
@@ -17,7 +17,7 @@ except (ImportError, NameError):
|
|
17
17
|
logger = logging.getLogger(__name__)
|
18
18
|
|
19
19
|
|
20
|
-
class
|
20
|
+
class DeprecatedOAuthSSHChannel(DeprecatedSSHChannel):
|
21
21
|
"""SSH persistent channel. This enables remote execution on sites
|
22
22
|
accessible via ssh. This channel uses Globus based OAuth tokens for authentication.
|
23
23
|
"""
|
parsl/channels/ssh/ssh.py
CHANGED
@@ -24,7 +24,7 @@ class NoAuthSSHClient(paramiko.SSHClient):
|
|
24
24
|
return
|
25
25
|
|
26
26
|
|
27
|
-
class
|
27
|
+
class DeprecatedSSHChannel(Channel, RepresentationMixin):
|
28
28
|
''' SSH persistent channel. This enables remote execution on sites
|
29
29
|
accessible via ssh. It is assumed that the user has setup host keys
|
30
30
|
so as to ssh to the remote host. Which goes to say that the following
|
parsl/channels/ssh_il/ssh_il.py
CHANGED
@@ -3,12 +3,12 @@ import logging
|
|
3
3
|
|
4
4
|
import paramiko
|
5
5
|
|
6
|
-
from parsl.channels.ssh.ssh import
|
6
|
+
from parsl.channels.ssh.ssh import DeprecatedSSHChannel
|
7
7
|
|
8
8
|
logger = logging.getLogger(__name__)
|
9
9
|
|
10
10
|
|
11
|
-
class
|
11
|
+
class DeprecatedSSHInteractiveLoginChannel(DeprecatedSSHChannel):
|
12
12
|
"""SSH persistent channel. This enables remote execution on sites
|
13
13
|
accessible via ssh. This channel supports interactive login and is appropriate when
|
14
14
|
keys are not set up.
|
parsl/dataflow/dflow.py
CHANGED
@@ -116,7 +116,7 @@ class DataFlowKernel:
|
|
116
116
|
if self.monitoring:
|
117
117
|
if self.monitoring.logdir is None:
|
118
118
|
self.monitoring.logdir = self.run_dir
|
119
|
-
self.monitoring.start(self.
|
119
|
+
self.monitoring.start(self.run_dir, self.config.run_dir)
|
120
120
|
|
121
121
|
self.time_began = datetime.datetime.now()
|
122
122
|
self.time_completed: Optional[datetime.datetime] = None
|
@@ -551,6 +551,7 @@ class HighThroughputExecutor(BlockProviderExecutor, RepresentationMixin, UsageIn
|
|
551
551
|
"logging_level": logging.DEBUG if self.worker_debug else logging.INFO,
|
552
552
|
"cert_dir": self.cert_dir,
|
553
553
|
"manager_selector": self.manager_selector,
|
554
|
+
"run_id": self.run_id,
|
554
555
|
}
|
555
556
|
|
556
557
|
config_pickle = pickle.dumps(interchange_config)
|
@@ -831,7 +832,7 @@ class HighThroughputExecutor(BlockProviderExecutor, RepresentationMixin, UsageIn
|
|
831
832
|
try:
|
832
833
|
self.interchange_proc.wait(timeout=timeout)
|
833
834
|
except subprocess.TimeoutExpired:
|
834
|
-
logger.
|
835
|
+
logger.warning("Unable to terminate Interchange process; sending SIGKILL")
|
835
836
|
self.interchange_proc.kill()
|
836
837
|
|
837
838
|
logger.info("Closing ZMQ pipes")
|
@@ -55,6 +55,7 @@ class Interchange:
|
|
55
55
|
poll_period: int,
|
56
56
|
cert_dir: Optional[str],
|
57
57
|
manager_selector: ManagerSelector,
|
58
|
+
run_id: str,
|
58
59
|
) -> None:
|
59
60
|
"""
|
60
61
|
Parameters
|
@@ -125,6 +126,8 @@ class Interchange:
|
|
125
126
|
self.command_channel.connect("tcp://{}:{}".format(client_address, client_ports[2]))
|
126
127
|
logger.info("Connected to client")
|
127
128
|
|
129
|
+
self.run_id = run_id
|
130
|
+
|
128
131
|
self.hub_address = hub_address
|
129
132
|
self.hub_zmq_port = hub_zmq_port
|
130
133
|
|
@@ -227,6 +230,7 @@ class Interchange:
|
|
227
230
|
d: Dict = cast(Dict, manager.copy())
|
228
231
|
d['timestamp'] = datetime.datetime.now()
|
229
232
|
d['last_heartbeat'] = datetime.datetime.fromtimestamp(d['last_heartbeat'])
|
233
|
+
d['run_id'] = self.run_id
|
230
234
|
|
231
235
|
monitoring_radio.send((MessageType.NODE_INFO, d))
|
232
236
|
|
@@ -589,11 +589,13 @@ class TaskVineExecutor(BlockProviderExecutor, putils.RepresentationMixin):
|
|
589
589
|
# Join all processes before exiting
|
590
590
|
logger.debug("Joining on submit process")
|
591
591
|
self._submit_process.join()
|
592
|
+
self._submit_process.close()
|
592
593
|
logger.debug("Joining on collector thread")
|
593
594
|
self._collector_thread.join()
|
594
595
|
if self.worker_launch_method == 'factory':
|
595
596
|
logger.debug("Joining on factory process")
|
596
597
|
self._factory_process.join()
|
598
|
+
self._factory_process.close()
|
597
599
|
|
598
600
|
# Shutdown multiprocessing queues
|
599
601
|
self._ready_task_queue.close()
|
@@ -704,6 +704,8 @@ class WorkQueueExecutor(BlockProviderExecutor, putils.RepresentationMixin):
|
|
704
704
|
|
705
705
|
logger.debug("Joining on submit process")
|
706
706
|
self.submit_process.join()
|
707
|
+
self.submit_process.close()
|
708
|
+
|
707
709
|
logger.debug("Joining on collector thread")
|
708
710
|
self.collector_thread.join()
|
709
711
|
|
parsl/monitoring/db_manager.py
CHANGED
@@ -283,7 +283,7 @@ class DatabaseManager:
|
|
283
283
|
):
|
284
284
|
|
285
285
|
self.workflow_end = False
|
286
|
-
self.workflow_start_message
|
286
|
+
self.workflow_start_message: Optional[MonitoringMessage] = None
|
287
287
|
self.logdir = logdir
|
288
288
|
os.makedirs(self.logdir, exist_ok=True)
|
289
289
|
|
@@ -299,10 +299,10 @@ class DatabaseManager:
|
|
299
299
|
self.batching_interval = batching_interval
|
300
300
|
self.batching_threshold = batching_threshold
|
301
301
|
|
302
|
-
self.pending_priority_queue
|
303
|
-
self.pending_node_queue
|
304
|
-
self.pending_block_queue
|
305
|
-
self.pending_resource_queue
|
302
|
+
self.pending_priority_queue: queue.Queue[TaggedMonitoringMessage] = queue.Queue()
|
303
|
+
self.pending_node_queue: queue.Queue[MonitoringMessage] = queue.Queue()
|
304
|
+
self.pending_block_queue: queue.Queue[MonitoringMessage] = queue.Queue()
|
305
|
+
self.pending_resource_queue: queue.Queue[MonitoringMessage] = queue.Queue()
|
306
306
|
|
307
307
|
def start(self,
|
308
308
|
priority_queue: "queue.Queue[TaggedMonitoringMessage]",
|
@@ -351,18 +351,18 @@ class DatabaseManager:
|
|
351
351
|
If that happens, the message will be added to deferred_resource_messages and processed later.
|
352
352
|
|
353
353
|
"""
|
354
|
-
inserted_tasks = set()
|
354
|
+
inserted_tasks: Set[object] = set()
|
355
355
|
|
356
356
|
"""
|
357
357
|
like inserted_tasks but for task,try tuples
|
358
358
|
"""
|
359
|
-
inserted_tries = set()
|
359
|
+
inserted_tries: Set[Any] = set()
|
360
360
|
|
361
361
|
# for any task ID, we can defer exactly one message, which is the
|
362
362
|
# assumed-to-be-unique first message (with first message flag set).
|
363
363
|
# The code prior to this patch will discard previous message in
|
364
364
|
# the case of multiple messages to defer.
|
365
|
-
deferred_resource_messages = {}
|
365
|
+
deferred_resource_messages: MonitoringMessage = {}
|
366
366
|
|
367
367
|
exception_happened = False
|
368
368
|
|
@@ -505,7 +505,7 @@ class DatabaseManager:
|
|
505
505
|
"Got {} messages from block queue".format(len(block_info_messages)))
|
506
506
|
# block_info_messages is possibly a nested list of dict (at different polling times)
|
507
507
|
# Each dict refers to the info of a job/block at one polling time
|
508
|
-
block_messages_to_insert
|
508
|
+
block_messages_to_insert: List[Any] = []
|
509
509
|
for block_msg in block_info_messages:
|
510
510
|
block_messages_to_insert.extend(block_msg)
|
511
511
|
self._insert(table=BLOCK, messages=block_messages_to_insert)
|
@@ -686,7 +686,7 @@ class DatabaseManager:
|
|
686
686
|
logger.exception("Rollback failed")
|
687
687
|
|
688
688
|
def _get_messages_in_batch(self, msg_queue: "queue.Queue[X]") -> List[X]:
|
689
|
-
messages
|
689
|
+
messages: List[X] = []
|
690
690
|
start = time.time()
|
691
691
|
while True:
|
692
692
|
if time.time() - start >= self.batching_interval or len(messages) >= self.batching_threshold:
|
parsl/monitoring/monitoring.py
CHANGED
@@ -106,7 +106,7 @@ class MonitoringHub(RepresentationMixin):
|
|
106
106
|
self.resource_monitoring_enabled = resource_monitoring_enabled
|
107
107
|
self.resource_monitoring_interval = resource_monitoring_interval
|
108
108
|
|
109
|
-
def start(self,
|
109
|
+
def start(self, dfk_run_dir: str, config_run_dir: Union[str, os.PathLike]) -> None:
|
110
110
|
|
111
111
|
logger.debug("Starting MonitoringHub")
|
112
112
|
|
@@ -161,7 +161,6 @@ class MonitoringHub(RepresentationMixin):
|
|
161
161
|
"zmq_port_range": self.hub_port_range,
|
162
162
|
"logdir": self.logdir,
|
163
163
|
"logging_level": logging.DEBUG if self.monitoring_debug else logging.INFO,
|
164
|
-
"run_id": run_id
|
165
164
|
},
|
166
165
|
name="Monitoring-Router-Process",
|
167
166
|
daemon=True,
|
parsl/monitoring/remote.py
CHANGED
@@ -199,10 +199,10 @@ def monitor(pid: int,
|
|
199
199
|
|
200
200
|
pm = psutil.Process(pid)
|
201
201
|
|
202
|
-
children_user_time
|
203
|
-
children_system_time
|
204
|
-
children_num_ctx_switches_voluntary
|
205
|
-
children_num_ctx_switches_involuntary
|
202
|
+
children_user_time: Dict[int, float] = {}
|
203
|
+
children_system_time: Dict[int, float] = {}
|
204
|
+
children_num_ctx_switches_voluntary: Dict[int, float] = {}
|
205
|
+
children_num_ctx_switches_involuntary: Dict[int, float] = {}
|
206
206
|
|
207
207
|
def accumulate_and_prepare() -> Dict[str, Any]:
|
208
208
|
d = {"psutil_process_" + str(k): v for k, v in pm.as_dict().items() if k in simple}
|
parsl/monitoring/router.py
CHANGED
@@ -31,7 +31,6 @@ class MonitoringRouter:
|
|
31
31
|
|
32
32
|
monitoring_hub_address: str = "127.0.0.1",
|
33
33
|
logdir: str = ".",
|
34
|
-
run_id: str,
|
35
34
|
logging_level: int = logging.INFO,
|
36
35
|
atexit_timeout: int = 3, # in seconds
|
37
36
|
priority_msgs: "queue.Queue[AddressedMonitoringMessage]",
|
@@ -71,7 +70,6 @@ class MonitoringRouter:
|
|
71
70
|
|
72
71
|
self.hub_address = hub_address
|
73
72
|
self.atexit_timeout = atexit_timeout
|
74
|
-
self.run_id = run_id
|
75
73
|
|
76
74
|
self.loop_freq = 10.0 # milliseconds
|
77
75
|
|
@@ -172,7 +170,6 @@ class MonitoringRouter:
|
|
172
170
|
msg_0 = (msg, 0)
|
173
171
|
|
174
172
|
if msg[0] == MessageType.NODE_INFO:
|
175
|
-
msg[1]['run_id'] = self.run_id
|
176
173
|
self.node_msgs.put(msg_0)
|
177
174
|
elif msg[0] == MessageType.RESOURCE_INFO:
|
178
175
|
self.resource_msgs.put(msg_0)
|
@@ -218,8 +215,7 @@ def router_starter(comm_q: "queue.Queue[Union[Tuple[int, int], str]]",
|
|
218
215
|
zmq_port_range: Tuple[int, int],
|
219
216
|
|
220
217
|
logdir: str,
|
221
|
-
logging_level: int
|
222
|
-
run_id: str) -> None:
|
218
|
+
logging_level: int) -> None:
|
223
219
|
setproctitle("parsl: monitoring router")
|
224
220
|
try:
|
225
221
|
router = MonitoringRouter(hub_address=hub_address,
|
@@ -227,7 +223,6 @@ def router_starter(comm_q: "queue.Queue[Union[Tuple[int, int], str]]",
|
|
227
223
|
zmq_port_range=zmq_port_range,
|
228
224
|
logdir=logdir,
|
229
225
|
logging_level=logging_level,
|
230
|
-
run_id=run_id,
|
231
226
|
priority_msgs=priority_msgs,
|
232
227
|
node_msgs=node_msgs,
|
233
228
|
block_msgs=block_msgs,
|
parsl/providers/__init__.py
CHANGED
@@ -1,6 +1,3 @@
|
|
1
|
-
# Workstation Provider
|
2
|
-
from parsl.providers.ad_hoc.ad_hoc import AdHocProvider
|
3
|
-
|
4
1
|
# Cloud Providers
|
5
2
|
from parsl.providers.aws.aws import AWSProvider
|
6
3
|
from parsl.providers.azure.azure import AzureProvider
|
@@ -24,7 +21,6 @@ __all__ = ['LocalProvider',
|
|
24
21
|
'SlurmProvider',
|
25
22
|
'TorqueProvider',
|
26
23
|
'LSFProvider',
|
27
|
-
'AdHocProvider',
|
28
24
|
'PBSProProvider',
|
29
25
|
'AWSProvider',
|
30
26
|
'GoogleCloudProvider',
|
parsl/providers/ad_hoc/ad_hoc.py
CHANGED
@@ -12,8 +12,12 @@ from parsl.utils import RepresentationMixin
|
|
12
12
|
logger = logging.getLogger(__name__)
|
13
13
|
|
14
14
|
|
15
|
-
class
|
16
|
-
"""
|
15
|
+
class DeprecatedAdHocProvider(ExecutionProvider, RepresentationMixin):
|
16
|
+
""" Deprecated ad-hoc execution provider
|
17
|
+
|
18
|
+
The (former) AdHocProvider is deprecated. See
|
19
|
+
`issue #3515 <https://github.com/Parsl/parsl/issues/3515>`_
|
20
|
+
for further discussion.
|
17
21
|
|
18
22
|
This provider is used to provision execution resources over one or more ad hoc nodes
|
19
23
|
that are each accessible over a Channel (say, ssh) but otherwise lack a cluster scheduler.
|
@@ -1,7 +1,7 @@
|
|
1
1
|
from parsl.channels import LocalChannel
|
2
2
|
from parsl.config import Config
|
3
3
|
from parsl.executors import HighThroughputExecutor
|
4
|
-
from parsl.providers import
|
4
|
+
from parsl.providers.ad_hoc.ad_hoc import DeprecatedAdHocProvider
|
5
5
|
|
6
6
|
|
7
7
|
def fresh_config():
|
@@ -10,7 +10,7 @@ def fresh_config():
|
|
10
10
|
HighThroughputExecutor(
|
11
11
|
label='AdHoc',
|
12
12
|
encrypted=True,
|
13
|
-
provider=
|
13
|
+
provider=DeprecatedAdHocProvider(
|
14
14
|
channels=[LocalChannel(), LocalChannel()]
|
15
15
|
)
|
16
16
|
)
|
@@ -25,7 +25,8 @@ def make_interchange(*, interchange_address: Optional[str], cert_dir: Optional[s
|
|
25
25
|
logdir=".",
|
26
26
|
logging_level=logging.INFO,
|
27
27
|
manager_selector=RandomManagerSelector(),
|
28
|
-
poll_period=10
|
28
|
+
poll_period=10,
|
29
|
+
run_id="test_run_id")
|
29
30
|
|
30
31
|
|
31
32
|
@pytest.fixture
|
@@ -11,7 +11,8 @@ import time
|
|
11
11
|
|
12
12
|
import pytest
|
13
13
|
|
14
|
-
from parsl.channels import LocalChannel
|
14
|
+
from parsl.channels import LocalChannel
|
15
|
+
from parsl.channels.ssh.ssh import DeprecatedSSHChannel
|
15
16
|
from parsl.jobs.states import JobState
|
16
17
|
from parsl.launchers import SingleNodeLauncher
|
17
18
|
from parsl.providers import LocalProvider
|
@@ -92,10 +93,10 @@ def test_ssh_channel():
|
|
92
93
|
# already exist, so create it here.
|
93
94
|
pathlib.Path('{}/known.hosts'.format(config_dir)).touch(mode=0o600)
|
94
95
|
script_dir = tempfile.mkdtemp()
|
95
|
-
channel =
|
96
|
-
|
97
|
-
|
98
|
-
|
96
|
+
channel = DeprecatedSSHChannel('127.0.0.1', port=server_port,
|
97
|
+
script_dir=remote_script_dir,
|
98
|
+
host_keys_filename='{}/known.hosts'.format(config_dir),
|
99
|
+
key_filename=priv_key)
|
99
100
|
try:
|
100
101
|
p = LocalProvider(channel=channel,
|
101
102
|
launcher=SingleNodeLauncher(debug=False))
|
parsl/version.py
CHANGED
@@ -55,6 +55,7 @@ class Interchange:
|
|
55
55
|
poll_period: int,
|
56
56
|
cert_dir: Optional[str],
|
57
57
|
manager_selector: ManagerSelector,
|
58
|
+
run_id: str,
|
58
59
|
) -> None:
|
59
60
|
"""
|
60
61
|
Parameters
|
@@ -125,6 +126,8 @@ class Interchange:
|
|
125
126
|
self.command_channel.connect("tcp://{}:{}".format(client_address, client_ports[2]))
|
126
127
|
logger.info("Connected to client")
|
127
128
|
|
129
|
+
self.run_id = run_id
|
130
|
+
|
128
131
|
self.hub_address = hub_address
|
129
132
|
self.hub_zmq_port = hub_zmq_port
|
130
133
|
|
@@ -227,6 +230,7 @@ class Interchange:
|
|
227
230
|
d: Dict = cast(Dict, manager.copy())
|
228
231
|
d['timestamp'] = datetime.datetime.now()
|
229
232
|
d['last_heartbeat'] = datetime.datetime.fromtimestamp(d['last_heartbeat'])
|
233
|
+
d['run_id'] = self.run_id
|
230
234
|
|
231
235
|
monitoring_radio.send((MessageType.NODE_INFO, d))
|
232
236
|
|
@@ -1,9 +1,9 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: parsl
|
3
|
-
Version: 2024.8.
|
3
|
+
Version: 2024.8.12
|
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.08.
|
6
|
+
Download-URL: https://github.com/Parsl/parsl/archive/2024.08.12.tar.gz
|
7
7
|
Author: The Parsl Team
|
8
8
|
Author-email: parsl@googlegroups.com
|
9
9
|
License: Apache 2.0
|
@@ -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=zmI7FIN8AXv3b0Vpa7LbYgVzdHVLVu3NkfVqBNTu6aU,131
|
12
12
|
parsl/app/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
13
13
|
parsl/app/app.py,sha256=0gbM4AH2OtFOLsv07I5nglpElcwMSOi-FzdZZfrk7So,8532
|
14
14
|
parsl/app/bash.py,sha256=jm2AvePlCT9DZR7H_4ANDWxatp5dN_22FUlT_gWhZ-g,5528
|
@@ -17,22 +17,21 @@ parsl/app/futures.py,sha256=XU1NwkoNVsxy3KF5y0Ihsla5hPbhhuSikZInfS7h7Uo,2910
|
|
17
17
|
parsl/app/python.py,sha256=0hrz2BppVOwwNfh5hnoP70Yv56gSRkIoT-fP9XNb4v4,2331
|
18
18
|
parsl/benchmark/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
19
19
|
parsl/benchmark/perf.py,sha256=kKXefDozWXSJKSNA7qdfUgEoacA2-R9kSZcI2YvZ5uE,3096
|
20
|
-
parsl/channels/__init__.py,sha256=
|
20
|
+
parsl/channels/__init__.py,sha256=OEZcuNBOxUwmzrHMZOuPvkw4kUxrbJDA99crDk61O90,131
|
21
21
|
parsl/channels/base.py,sha256=bS43-Qv4VSxa83V6fJ54lNBL_eHCu-Ce7-aoy1C9vCc,4193
|
22
22
|
parsl/channels/errors.py,sha256=Dp0FhtHpygn0IjX8nGurx-WrTJm9aw-Jjz3SSUT-jCc,3283
|
23
23
|
parsl/channels/local/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
24
24
|
parsl/channels/local/local.py,sha256=xqH4HnipUN95NgvyB1r33SiqgQKkARgRKmg0_HnumUk,5311
|
25
25
|
parsl/channels/oauth_ssh/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
26
|
-
parsl/channels/oauth_ssh/oauth_ssh.py,sha256=
|
26
|
+
parsl/channels/oauth_ssh/oauth_ssh.py,sha256=2Hd5wEBVBhDQ9UHvO_iV4QhT6Na8GScy9O4HTM9Y5kA,3539
|
27
27
|
parsl/channels/ssh/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
28
|
-
parsl/channels/ssh/ssh.py,sha256=
|
28
|
+
parsl/channels/ssh/ssh.py,sha256=TOxEDVCO0hbr1oru_KVGo0vrVEh_bgbqcXXx6EZHehw,10135
|
29
29
|
parsl/channels/ssh_il/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
30
|
-
parsl/channels/ssh_il/ssh_il.py,sha256=
|
30
|
+
parsl/channels/ssh_il/ssh_il.py,sha256=cAEAPfEoMfq_lkeBYfJAhrITci61IW_fkmffhUcIwqA,2440
|
31
31
|
parsl/concurrent/__init__.py,sha256=TvIVceJYaJAsxedNBF3Vdo9lEQNHH_j3uxJv0zUjP7w,3288
|
32
32
|
parsl/configs/ASPIRE1.py,sha256=eKnmz0QD3V522emtXMjS6Ppeooe5lzcBgCE6cxunbYY,1718
|
33
33
|
parsl/configs/Azure.py,sha256=CJms3xWmdb-S3CksbHrPF2TfMxJC5I0faqUKCOzVg0k,1268
|
34
34
|
parsl/configs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
35
|
-
parsl/configs/ad_hoc.py,sha256=Gwnehd5_K6IzUSPECHnNBljyO-LQ9fyaBClHiT_myp8,1352
|
36
35
|
parsl/configs/bridges.py,sha256=NsTvCiHZHbJj-BsOXOpgS4hCblCHW_lnMa_VMb3SIww,1523
|
37
36
|
parsl/configs/cc_in2p3.py,sha256=T9PjUt2OFFv3w2uXFeKfIDmE7j_nllD3jVouvCmPrCc,785
|
38
37
|
parsl/configs/ec2.py,sha256=5xtlZI4Fc558sYXdM4nQQvQDBNPdzhRRCO14F-8H7Y4,944
|
@@ -62,7 +61,7 @@ parsl/data_provider/staging.py,sha256=ZDZuuFg38pjUStegKPcvPsfGp3iMeReMzfU6DSwtJj
|
|
62
61
|
parsl/data_provider/zip.py,sha256=S4kVuH9lxAegRURYbvIUR7EYYBOccyslaqyCrVWUBhw,4497
|
63
62
|
parsl/dataflow/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
64
63
|
parsl/dataflow/dependency_resolvers.py,sha256=Om8Dgh7a0ZwgXAc6TlhxLSzvxXHDlNNV1aBNiD3JTNY,3325
|
65
|
-
parsl/dataflow/dflow.py,sha256=
|
64
|
+
parsl/dataflow/dflow.py,sha256=2RV4MmQ3y6iwOT7aJaeWMsVPJ6tFT03V0YAcUbxogpk,68250
|
66
65
|
parsl/dataflow/errors.py,sha256=9SxVhIJY_53FQx8x4OU8UA8nd7lvUbDllH7KfMXpYaY,2177
|
67
66
|
parsl/dataflow/futures.py,sha256=08LuP-HFiHBIZmeKCjlsazw_WpQ5fwevrU2_WbidkYw,6080
|
68
67
|
parsl/dataflow/memoization.py,sha256=l9uw1Bu50GucBF70M5relpGKFkE4dIM9T3R1KrxW0v0,9583
|
@@ -80,8 +79,8 @@ parsl/executors/flux/executor.py,sha256=8_xakLUu5zNJAHL0LbeTCFEWqWzRK1eE-3ep4GII
|
|
80
79
|
parsl/executors/flux/flux_instance_manager.py,sha256=5T3Rp7ZM-mlT0Pf0Gxgs5_YmnaPrSF9ec7zvRfLfYJw,2129
|
81
80
|
parsl/executors/high_throughput/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
82
81
|
parsl/executors/high_throughput/errors.py,sha256=Sak8e8UpiEcXefUjMHbhyXc4Rn7kJtOoh7L8wreBQdk,1638
|
83
|
-
parsl/executors/high_throughput/executor.py,sha256=
|
84
|
-
parsl/executors/high_throughput/interchange.py,sha256=
|
82
|
+
parsl/executors/high_throughput/executor.py,sha256=rMYu1PP-nXS8Oh9wu8Z-diNbI8J2fmuNqb3wvoyuMIc,38221
|
83
|
+
parsl/executors/high_throughput/interchange.py,sha256=upaJht6YnqvJqVF1Ub7GEyRFDtw1v19d0JmCWNXsi6k,31094
|
85
84
|
parsl/executors/high_throughput/manager_record.py,sha256=yn3L8TUJFkgm2lX1x0SeS9mkvJowC0s2VIMCFiU7ThM,455
|
86
85
|
parsl/executors/high_throughput/manager_selector.py,sha256=uRaEtcbDO2vXf8vjEcm7bfZVdeUlSPTRc3G4oFRO29M,820
|
87
86
|
parsl/executors/high_throughput/monitoring_info.py,sha256=HC0drp6nlXQpAop5PTUKNjdXMgtZVvrBL0JzZJebPP4,298
|
@@ -98,7 +97,7 @@ parsl/executors/radical/rpex_worker.py,sha256=qli6i6ejKubTSv3lAE3YiW8RlkHrfl4Jhr
|
|
98
97
|
parsl/executors/taskvine/__init__.py,sha256=9rwp3M8B0YyEhZMLO0RHaNw7u1nc01WHbXLqnBTanu0,293
|
99
98
|
parsl/executors/taskvine/errors.py,sha256=euIYkSslrNSI85kyi2s0xzOaO9ik4c1fYHstMIeiBJk,652
|
100
99
|
parsl/executors/taskvine/exec_parsl_function.py,sha256=ftGdJU78lKPPkphSHlEi4rj164mhuMHJjghVqfgeXKk,7085
|
101
|
-
parsl/executors/taskvine/executor.py,sha256=
|
100
|
+
parsl/executors/taskvine/executor.py,sha256=yODov_9LNyuxJga2Ki-fp1WEHwDcwNsLIBaqP8bAvfw,31056
|
102
101
|
parsl/executors/taskvine/factory.py,sha256=rWpEoFphLzqO3HEYyDEbQa14iyvgkdZg7hLZuaY39gQ,2638
|
103
102
|
parsl/executors/taskvine/factory_config.py,sha256=AbE2fN2snrF5ITYrrS4DnGn2XkJHUFr_17DYHDHIwq0,3693
|
104
103
|
parsl/executors/taskvine/manager.py,sha256=fwRSgYWpbsnr5jXlzvX0sQjOqryqn_77K_svJJ1HJ2U,25631
|
@@ -107,7 +106,7 @@ parsl/executors/taskvine/utils.py,sha256=iSrIogeiauL3UNy_9tiZp1cBSNn6fIJkMYQRVi1
|
|
107
106
|
parsl/executors/workqueue/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
108
107
|
parsl/executors/workqueue/errors.py,sha256=XO2naYhAsHHyiOBH6hpObg3mPNDmvMoFqErsj0-v7jc,541
|
109
108
|
parsl/executors/workqueue/exec_parsl_function.py,sha256=RUkJ4JSJAjr7YyRZ58zhMdg8cR5dVV9odUl3AuzNf3k,7802
|
110
|
-
parsl/executors/workqueue/executor.py,sha256=
|
109
|
+
parsl/executors/workqueue/executor.py,sha256=aS864cpAvWQeW6hDqOtX_aUa1YnXsPcemuiVMq51pys,49840
|
111
110
|
parsl/executors/workqueue/parsl_coprocess.py,sha256=cF1UmTgVLoey6QzBcbYgEiEsRidSaFfuO54f1HFw_EM,5737
|
112
111
|
parsl/executors/workqueue/parsl_coprocess_stub.py,sha256=_bJmpPIgL42qM6bVzeEKt1Mn1trSP41rtJguXxPGfHI,735
|
113
112
|
parsl/jobs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -121,13 +120,13 @@ parsl/launchers/base.py,sha256=CblcvPTJiu-MNLWaRtFe29SZQ0BpTOlaY8CGcHdlHIE,538
|
|
121
120
|
parsl/launchers/errors.py,sha256=8YMV_CHpBNVa4eXkGE4x5DaFQlZkDCRCHmBktYcY6TA,467
|
122
121
|
parsl/launchers/launchers.py,sha256=VB--fiVv_IQne3DydTMSdGUY0o0g69puAs-Hd3mJ2vo,15464
|
123
122
|
parsl/monitoring/__init__.py,sha256=0ywNz6i0lM1xo_7_BIxhETDGeVd2C_0wwD7qgeaMR4c,83
|
124
|
-
parsl/monitoring/db_manager.py,sha256=
|
123
|
+
parsl/monitoring/db_manager.py,sha256=XAhnxX56ZupYL0HfHuQDiwmGsahXVRc-A4VV8tfwths,36931
|
125
124
|
parsl/monitoring/errors.py,sha256=D6jpYzEzp0d6FmVKGqhvjAxr4ztZfJX2s-aXemH9bBU,148
|
126
125
|
parsl/monitoring/message_type.py,sha256=Khn88afNxcOIciKiCK4GLnn90I5BlRTiOL3zK-P07yQ,401
|
127
|
-
parsl/monitoring/monitoring.py,sha256=
|
126
|
+
parsl/monitoring/monitoring.py,sha256=FhZ4qC74mTvH0n4z9jNHhomIASf0V8DqnRuZQEJGGP8,13524
|
128
127
|
parsl/monitoring/radios.py,sha256=cHdpBOW1ITYvFnOgYjziuZOauq8p7mlSBOvcbIP78mg,6437
|
129
|
-
parsl/monitoring/remote.py,sha256=
|
130
|
-
parsl/monitoring/router.py,sha256=
|
128
|
+
parsl/monitoring/remote.py,sha256=avIWMvejN0LeIXpt_RCXJxGLbsXhapUab2rS5Tmjca4,13739
|
129
|
+
parsl/monitoring/router.py,sha256=ezuE5tTBa-Ry0hSHtUiWacxnP37VkLUC1vuZaIBRNBA,11224
|
131
130
|
parsl/monitoring/types.py,sha256=_WGizCTgQVOkJ2dvNfsvHpYBj21Ky3bJsmyIskIx10I,631
|
132
131
|
parsl/monitoring/queries/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
133
132
|
parsl/monitoring/queries/pandas.py,sha256=0Z2r0rjTKCemf0eaDkF1irvVHn5g7KC5SYETvQPRxwU,2232
|
@@ -152,12 +151,12 @@ parsl/monitoring/visualization/templates/resource_usage.html,sha256=__QEaAPdO8kz
|
|
152
151
|
parsl/monitoring/visualization/templates/task.html,sha256=omDwp7zFXHVtuGsUCXcB7xLAsAW0Vrjd1b-wFZj9y70,2803
|
153
152
|
parsl/monitoring/visualization/templates/workflow.html,sha256=QCSHAPHK_2C3gNcZ3NmChLFG6xuchZEjT_iLQ3wwXmk,1871
|
154
153
|
parsl/monitoring/visualization/templates/workflows_summary.html,sha256=7brKKNsxcT4z-l10BKJlgTxQtGL033ZS5jEDdSmsPEE,891
|
155
|
-
parsl/providers/__init__.py,sha256=
|
154
|
+
parsl/providers/__init__.py,sha256=fvmVlu4aHw796K-fuUqxCHdK8KhrQviMARSmUQl1XXs,1077
|
156
155
|
parsl/providers/base.py,sha256=u8oGlAaDfh15EgOJNJF1aZUy0Ou-UW6UY0b7ZI7Ecjo,5702
|
157
156
|
parsl/providers/cluster_provider.py,sha256=o75wJHHyZkecjEBhGGBCMUQ1JlsecAhAKxX_Qd2pyg8,4668
|
158
157
|
parsl/providers/errors.py,sha256=_CbCmpguzcA81SC5dPLkDZs1AShzacGKttNhuzNBeiQ,2270
|
159
158
|
parsl/providers/ad_hoc/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
160
|
-
parsl/providers/ad_hoc/ad_hoc.py,sha256=
|
159
|
+
parsl/providers/ad_hoc/ad_hoc.py,sha256=NPZRJnVYT7IB2TCLThofcB7g0WZqgT_N0hDs3K86zhE,8466
|
161
160
|
parsl/providers/aws/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
162
161
|
parsl/providers/aws/aws.py,sha256=nS899gamCAhiIY-4zwaEToa7Om73PrAz4dvX5YSEkUQ,28985
|
163
162
|
parsl/providers/aws/template.py,sha256=N7OEpp7YP6CK5RUtLOwFnks7AE2UG5hHXddh8FF0BFs,347
|
@@ -209,7 +208,6 @@ parsl/tests/test_summary.py,sha256=x1RfWCFLzHjBw2ukwoRZPW1LFCKiwDmxx86ES-6yGRA,5
|
|
209
208
|
parsl/tests/test_thread_parallelism.py,sha256=TVNeQ1NkUhaf3YbbzUSH-ozFFdX_GbX-5ygommjVxvc,1653
|
210
209
|
parsl/tests/utils.py,sha256=YqUlBTj2UoAFVKVdLKh-1Y6MQM_ZSHPJOQ4GfQvFXyk,110
|
211
210
|
parsl/tests/configs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
212
|
-
parsl/tests/configs/ad_hoc_cluster_htex.py,sha256=twCY2ppy1M7EpPkwVC-8oboaiSwqNBrQV0noFBWPMJ0,1301
|
213
211
|
parsl/tests/configs/azure_single_node.py,sha256=iX99_MCPkInOzByB5QRYYBSbWDhFaTcA7CkJk9DreuU,1729
|
214
212
|
parsl/tests/configs/bluewaters.py,sha256=SyCQ99Iih6sYjJVLj5C-AzUqff8vowP113ZC8JHDc24,1370
|
215
213
|
parsl/tests/configs/bridges.py,sha256=WqMa340ZEXRmwgY7oe6QjJnUMO3Y3vAfKngg0XNyVRI,1602
|
@@ -220,12 +218,11 @@ parsl/tests/configs/ec2_single_node.py,sha256=rK9AfMf4C84CXMhS5nhgHA_dNG2An7Yiq2
|
|
220
218
|
parsl/tests/configs/ec2_spot.py,sha256=NKDCKgKxYNOHGVLBl2DFfiUwkR6xQnyhNb_E04TBs28,1253
|
221
219
|
parsl/tests/configs/flux_local.py,sha256=xliKQfB5FFpfNHWYEHoA8FKOTVHFCXVhWNuKQ5VJNTk,182
|
222
220
|
parsl/tests/configs/frontera.py,sha256=VXaRcvsi9ZjqJHi71BbKXSJBuQXdhCzPxXKW7H3LRBI,1567
|
223
|
-
parsl/tests/configs/htex_ad_hoc_cluster.py,sha256=Nr5ZVs4kVvX2UbRk8j9VW6xYGf9SR43SvodkU8RVWEQ,944
|
224
221
|
parsl/tests/configs/htex_local.py,sha256=o7Lxz1nErHpLNcH7vEEy9KyCNiEf6r3gpCrBmdQbh94,719
|
225
222
|
parsl/tests/configs/htex_local_alternate.py,sha256=CnEfKbt1nnGYwKVICA2tmyqDNH0GP9pFLao2bNXGRHI,2510
|
226
223
|
parsl/tests/configs/htex_local_intask_staging.py,sha256=E7uZD_AIAbxavkw4VrVXlGG7k42YJZv2qluAO-W0VvI,886
|
227
224
|
parsl/tests/configs/htex_local_rsync_staging.py,sha256=cqTRcHLjqYnOL07Lb8ecTzQuzP-dWDpWdKhgtTwo-fU,940
|
228
|
-
parsl/tests/configs/local_adhoc.py,sha256=
|
225
|
+
parsl/tests/configs/local_adhoc.py,sha256=jlyDwwIm0uVuyDgKZCb3wa3k0IaqcYT0ErMhu_0N26s,509
|
229
226
|
parsl/tests/configs/local_radical.py,sha256=C70I6ssfaaHEY1MMCC77izpp6sdANALH-P2mDR2msN0,417
|
230
227
|
parsl/tests/configs/local_radical_mpi.py,sha256=5OabeXXJPE0fyiA1AlGcQYoPRjQRk-HNA-xPLTFyAr4,532
|
231
228
|
parsl/tests/configs/local_threads.py,sha256=oEnQSlom_JMLFX9_Ln49JAfOP3nSMbw8gTaDJo_NYfo,202
|
@@ -243,7 +240,6 @@ parsl/tests/configs/nscc_singapore.py,sha256=ECENZcBuCjkY6OWZstEMhfMrmjRmjCc7ELd
|
|
243
240
|
parsl/tests/configs/osg_htex.py,sha256=x-C_r7Kpwvqroc4Ay1Yaya9K6_j7IU1ywqPegBU7HKI,1371
|
244
241
|
parsl/tests/configs/petrelkube.py,sha256=uUxrZrD_cF-_t6ytlRA_MUtw8RQbpW0CmNRbw3mWs1o,1699
|
245
242
|
parsl/tests/configs/summit.py,sha256=0LbuTVmc8nl2eGiqAayhV0RCx0pg5kUpYhz9LvTFhDo,1378
|
246
|
-
parsl/tests/configs/swan_htex.py,sha256=WEICoOrYWJKlium7R52TRHJ6Env_KVhKE2kbgu2ZJD8,1501
|
247
243
|
parsl/tests/configs/taskvine_ex.py,sha256=Nsovxtb59q6ta2opGrl7ufWcavYQtzSPrscLmaLYkUU,472
|
248
244
|
parsl/tests/configs/theta.py,sha256=bkwcFcZYSkJOfLdcPHiAN2BRRGz3nLTaPylvdm3dcJ8,1298
|
249
245
|
parsl/tests/configs/user_opts.py,sha256=fNO1OxISFPP7IyJ_iwf8dQ6EagVr2StXtOWmGnA9MeI,6265
|
@@ -255,22 +251,15 @@ parsl/tests/integration/test_apps/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeR
|
|
255
251
|
parsl/tests/integration/test_channels/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
256
252
|
parsl/tests/integration/test_channels/test_channels.py,sha256=Nv_1ljrJ5Miqe4U5q9XPBqc0YZbJC90TIsH0p3203Gs,323
|
257
253
|
parsl/tests/integration/test_channels/test_local_channel.py,sha256=_j9z4LqdfawEQRlae6EHpMtrhMPMapbIlJwoHEibAuE,1009
|
258
|
-
parsl/tests/integration/test_channels/test_scp_1.py,sha256=K7KWTeiZULBBydbvfmBzvRm7KM7nlkZn_O2-v5D5yY4,1014
|
259
|
-
parsl/tests/integration/test_channels/test_ssh_1.py,sha256=5HQehVteKCPXFt4V3W2YXgGvDm0sKP2MmJC0TCnJUbs,933
|
260
|
-
parsl/tests/integration/test_channels/test_ssh_errors.py,sha256=VKaNZAbXr7uv8EhG7FIVm8Veq2WnMJ2Jel7A3t5v_dQ,1279
|
261
|
-
parsl/tests/integration/test_channels/test_ssh_file_transport.py,sha256=9cBi7CPzM-4NxsCW3VfmRWgOvOb-mk8hpH187clScvc,904
|
262
|
-
parsl/tests/integration/test_channels/test_ssh_interactive.py,sha256=voUAR21RZD0c9fPDfAN9PZiiZw58qk_hxC92LL10VSA,568
|
263
254
|
parsl/tests/integration/test_stress/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
264
255
|
parsl/tests/integration/test_stress/test_python_simple.py,sha256=QZMhi6E0OmMsKi3QkHJZdNpALSrWshrLcKsstLANUWE,1007
|
265
256
|
parsl/tests/integration/test_stress/test_python_threads.py,sha256=-4dW-g69cu6uhSvk5HiH0fI6ceckQNqUXZGvNK6QGq4,897
|
266
257
|
parsl/tests/manual_tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
267
258
|
parsl/tests/manual_tests/htex_local.py,sha256=6bbnCPy7t_sJUrvDXiLB97joP8UWGjAdEs4aRP6PkFQ,820
|
268
|
-
parsl/tests/manual_tests/test_ad_hoc_htex.py,sha256=CPBzPd21GwKlz5jbHCipPepc3v0ZFiTdQCR8pAwlxkQ,1255
|
269
259
|
parsl/tests/manual_tests/test_basic.py,sha256=3uCS9BqaZmKTNtNfJSsJIg2exlTAdC0Sdc1w9hY9Tvc,4023
|
270
260
|
parsl/tests/manual_tests/test_fan_in_out_htex_remote.py,sha256=j9GkGwV7sP8ytIz4L7usuVacvBfFyIm-lq9F74KO85o,2422
|
271
261
|
parsl/tests/manual_tests/test_log_filter.py,sha256=jwKclAVuESdlGK_giBuHDkY6ryX6rZB7q01lXT5K0XU,1872
|
272
262
|
parsl/tests/manual_tests/test_memory_limits.py,sha256=XGV_YmIeiGMt1HWYS0Zxo-XkVoKsvHhl11_U3MTg1KI,2677
|
273
|
-
parsl/tests/manual_tests/test_oauth_ssh.py,sha256=v7msnSS5ywrWl7oqB_gR72oU2owrpzxaQ4vBt9C8pxI,337
|
274
263
|
parsl/tests/manual_tests/test_regression_220.py,sha256=Jo2puWt1W0r1rJfaJFgd2ZPgR3i6uOXzrLRcfYDZWDo,931
|
275
264
|
parsl/tests/manual_tests/test_udp_simple.py,sha256=VyEbE3G5pcRjzbdUbQlL0BHiilfOsNsbbLOJghU7n84,1037
|
276
265
|
parsl/tests/manual_tests/test_worker_count.py,sha256=Cv8nAWMXAREiiGEBUr_8JyI87ffp8JGAyDqVXzcjX_0,2072
|
@@ -353,7 +342,7 @@ parsl/tests/test_htex/test_managers_command.py,sha256=Y-eUjtBzwW9erCYdph9bOesbkU
|
|
353
342
|
parsl/tests/test_htex/test_missing_worker.py,sha256=gyp5i7_t-JHyJGtz_eXZKKBY5w8oqLOIxO6cJgGJMtQ,745
|
354
343
|
parsl/tests/test_htex/test_multiple_disconnected_blocks.py,sha256=Axn8us43dA722O4PWdqxCJM5f_vinZqjFT1WAEvC_ZM,1995
|
355
344
|
parsl/tests/test_htex/test_worker_failure.py,sha256=Uz-RHI-LK78FMjXUvrUFmo4iYfmpDVBUcBxxRb3UG9M,603
|
356
|
-
parsl/tests/test_htex/test_zmq_binding.py,sha256=
|
345
|
+
parsl/tests/test_htex/test_zmq_binding.py,sha256=Bq1HHuMxBE_AcaP1VZ-RqE4euCHO__Du05b2UZ5H1RA,3950
|
357
346
|
parsl/tests/test_monitoring/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
358
347
|
parsl/tests/test_monitoring/test_app_names.py,sha256=ayyxySGWpKSe9dDw2UeJo1dicxjpALRuLsJfprZV4Eg,2174
|
359
348
|
parsl/tests/test_monitoring/test_basic.py,sha256=nQERwVH56CjrKc_YSsMxH5UziJDqN2357Vhyd0brbRU,4177
|
@@ -374,7 +363,7 @@ parsl/tests/test_mpi_apps/test_mpiex.py,sha256=U4Djvzsf_oKgtxL6HXBxxEzrHiYVw2dQB
|
|
374
363
|
parsl/tests/test_mpi_apps/test_resource_spec.py,sha256=A7NwNT4LalCSOiHws1ALrrWy8Mn1IItpv9olhnRVjs0,3987
|
375
364
|
parsl/tests/test_providers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
376
365
|
parsl/tests/test_providers/test_cobalt_deprecation_warning.py,sha256=UN2W6xJxuLx2euPqArORKFEU2VXez9_PYqq-0rZHanQ,391
|
377
|
-
parsl/tests/test_providers/test_local_provider.py,sha256=
|
366
|
+
parsl/tests/test_providers/test_local_provider.py,sha256=R96E1eWgHVkvOQ1Au9wj-gfdWKAqGc-qlygFuxpGFQ8,7160
|
378
367
|
parsl/tests/test_providers/test_pbspro_template.py,sha256=-bi1vags9yyNfpBxtjTqFjzMIg1VVPyf2M958UcXWmA,855
|
379
368
|
parsl/tests/test_providers/test_slurm_instantiate.py,sha256=eW3pEZRIzZO1-eKFrBc7N5uoN5otwghgbqut74Kyqoc,500
|
380
369
|
parsl/tests/test_providers/test_slurm_template.py,sha256=pBEeimO-vGbMmC1QT7BP7s5BH6fFeqaWnI4f6tWPFEo,901
|
@@ -470,13 +459,13 @@ parsl/usage_tracking/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hS
|
|
470
459
|
parsl/usage_tracking/api.py,sha256=iaCY58Dc5J4UM7_dJzEEs871P1p1HdxBMtNGyVdzc9g,1821
|
471
460
|
parsl/usage_tracking/levels.py,sha256=xbfzYEsd55KiZJ-mzNgPebvOH4rRHum04hROzEf41tU,291
|
472
461
|
parsl/usage_tracking/usage.py,sha256=qNEJ7nPimqd3Y7OWFLdYmNwJ6XDKlyfV_fTzasxsQw8,8690
|
473
|
-
parsl-2024.8.
|
474
|
-
parsl-2024.8.
|
475
|
-
parsl-2024.8.
|
476
|
-
parsl-2024.8.
|
477
|
-
parsl-2024.8.
|
478
|
-
parsl-2024.8.
|
479
|
-
parsl-2024.8.
|
480
|
-
parsl-2024.8.
|
481
|
-
parsl-2024.8.
|
482
|
-
parsl-2024.8.
|
462
|
+
parsl-2024.8.12.data/scripts/exec_parsl_function.py,sha256=RUkJ4JSJAjr7YyRZ58zhMdg8cR5dVV9odUl3AuzNf3k,7802
|
463
|
+
parsl-2024.8.12.data/scripts/interchange.py,sha256=Gl9h3_MN4Ux2FJZxd2ObfTSZ5T1INYQDhU_bYFezbkE,31081
|
464
|
+
parsl-2024.8.12.data/scripts/parsl_coprocess.py,sha256=zrVjEqQvFOHxsLufPi00xzMONagjVwLZbavPM7bbjK4,5722
|
465
|
+
parsl-2024.8.12.data/scripts/process_worker_pool.py,sha256=78QKnV5KbY_vcteC6k60gpDE4wEk6hsciet_qzs9QoU,43061
|
466
|
+
parsl-2024.8.12.dist-info/LICENSE,sha256=tAkwu8-AdEyGxGoSvJ2gVmQdcicWw3j1ZZueVV74M-E,11357
|
467
|
+
parsl-2024.8.12.dist-info/METADATA,sha256=7Jds7wt0Rauv9RhkD1Qqdp3G7xI0YRSK4QHDpooLdjQ,4045
|
468
|
+
parsl-2024.8.12.dist-info/WHEEL,sha256=eOLhNAGa2EW3wWl_TU484h7q1UNgy0JXjjoqKoxAAQc,92
|
469
|
+
parsl-2024.8.12.dist-info/entry_points.txt,sha256=XqnsWDYoEcLbsMcpnYGKLEnSBmaIe1YoM5YsBdJG2tI,176
|
470
|
+
parsl-2024.8.12.dist-info/top_level.txt,sha256=PIheYoUFQtF2icLsgOykgU-Cjuwr2Oi6On2jo5RYgRM,6
|
471
|
+
parsl-2024.8.12.dist-info/RECORD,,
|
parsl/configs/ad_hoc.py
DELETED
@@ -1,38 +0,0 @@
|
|
1
|
-
from typing import Any, Dict
|
2
|
-
|
3
|
-
from parsl.channels import SSHChannel
|
4
|
-
from parsl.config import Config
|
5
|
-
from parsl.executors import HighThroughputExecutor
|
6
|
-
from parsl.providers import AdHocProvider
|
7
|
-
from parsl.usage_tracking.levels import LEVEL_1
|
8
|
-
|
9
|
-
user_opts: Dict[str, Dict[str, Any]]
|
10
|
-
user_opts = {'adhoc':
|
11
|
-
{'username': 'YOUR_USERNAME',
|
12
|
-
'script_dir': 'YOUR_SCRIPT_DIR',
|
13
|
-
'remote_hostnames': ['REMOTE_HOST_URL_1', 'REMOTE_HOST_URL_2']
|
14
|
-
}
|
15
|
-
}
|
16
|
-
|
17
|
-
|
18
|
-
config = Config(
|
19
|
-
executors=[
|
20
|
-
HighThroughputExecutor(
|
21
|
-
label='remote_htex',
|
22
|
-
max_workers_per_node=2,
|
23
|
-
worker_logdir_root=user_opts['adhoc']['script_dir'],
|
24
|
-
provider=AdHocProvider(
|
25
|
-
# Command to be run before starting a worker, such as:
|
26
|
-
# 'module load Anaconda; source activate parsl_env'.
|
27
|
-
worker_init='',
|
28
|
-
channels=[SSHChannel(hostname=m,
|
29
|
-
username=user_opts['adhoc']['username'],
|
30
|
-
script_dir=user_opts['adhoc']['script_dir'],
|
31
|
-
) for m in user_opts['adhoc']['remote_hostnames']]
|
32
|
-
)
|
33
|
-
)
|
34
|
-
],
|
35
|
-
# AdHoc Clusters should not be setup with scaling strategy.
|
36
|
-
strategy='none',
|
37
|
-
usage_tracking=LEVEL_1,
|
38
|
-
)
|
@@ -1,35 +0,0 @@
|
|
1
|
-
from typing import Any, Dict
|
2
|
-
|
3
|
-
from parsl.channels import SSHChannel
|
4
|
-
from parsl.config import Config
|
5
|
-
from parsl.executors import HighThroughputExecutor
|
6
|
-
from parsl.providers import AdHocProvider
|
7
|
-
|
8
|
-
user_opts = {'adhoc':
|
9
|
-
{'username': 'YOUR_USERNAME',
|
10
|
-
'script_dir': 'YOUR_SCRIPT_DIR',
|
11
|
-
'remote_hostnames': ['REMOTE_HOST_URL_1', 'REMOTE_HOST_URL_2']
|
12
|
-
}
|
13
|
-
} # type: Dict[str, Dict[str, Any]]
|
14
|
-
|
15
|
-
config = Config(
|
16
|
-
executors=[
|
17
|
-
HighThroughputExecutor(
|
18
|
-
label='remote_htex',
|
19
|
-
max_workers_per_node=2,
|
20
|
-
worker_logdir_root=user_opts['adhoc']['script_dir'],
|
21
|
-
encrypted=True,
|
22
|
-
provider=AdHocProvider(
|
23
|
-
# Command to be run before starting a worker, such as:
|
24
|
-
# 'module load Anaconda; source activate parsl_env'.
|
25
|
-
worker_init='',
|
26
|
-
channels=[SSHChannel(hostname=m,
|
27
|
-
username=user_opts['adhoc']['username'],
|
28
|
-
script_dir=user_opts['adhoc']['script_dir'],
|
29
|
-
) for m in user_opts['adhoc']['remote_hostnames']]
|
30
|
-
)
|
31
|
-
)
|
32
|
-
],
|
33
|
-
# AdHoc Clusters should not be setup with scaling strategy.
|
34
|
-
strategy='none',
|
35
|
-
)
|
@@ -1,26 +0,0 @@
|
|
1
|
-
from parsl.channels import SSHChannel
|
2
|
-
from parsl.config import Config
|
3
|
-
from parsl.executors import HighThroughputExecutor
|
4
|
-
from parsl.providers import AdHocProvider
|
5
|
-
from parsl.tests.configs.user_opts import user_opts
|
6
|
-
|
7
|
-
config = Config(
|
8
|
-
executors=[
|
9
|
-
HighThroughputExecutor(
|
10
|
-
label='remote_htex',
|
11
|
-
cores_per_worker=1,
|
12
|
-
worker_debug=False,
|
13
|
-
address=user_opts['public_ip'],
|
14
|
-
encrypted=True,
|
15
|
-
provider=AdHocProvider(
|
16
|
-
move_files=False,
|
17
|
-
parallelism=1,
|
18
|
-
worker_init=user_opts['adhoc']['worker_init'],
|
19
|
-
channels=[SSHChannel(hostname=m,
|
20
|
-
username=user_opts['adhoc']['username'],
|
21
|
-
script_dir=user_opts['adhoc']['script_dir'],
|
22
|
-
) for m in user_opts['adhoc']['remote_hostnames']]
|
23
|
-
)
|
24
|
-
)
|
25
|
-
],
|
26
|
-
)
|
parsl/tests/configs/swan_htex.py
DELETED
@@ -1,43 +0,0 @@
|
|
1
|
-
"""
|
2
|
-
================== Block
|
3
|
-
| ++++++++++++++ | Node
|
4
|
-
| | | |
|
5
|
-
| | Task | | . . .
|
6
|
-
| | | |
|
7
|
-
| ++++++++++++++ |
|
8
|
-
==================
|
9
|
-
"""
|
10
|
-
from parsl.channels import SSHChannel
|
11
|
-
from parsl.config import Config
|
12
|
-
from parsl.executors import HighThroughputExecutor
|
13
|
-
from parsl.launchers import AprunLauncher
|
14
|
-
from parsl.providers import TorqueProvider
|
15
|
-
|
16
|
-
# If you are a developer running tests, make sure to update parsl/tests/configs/user_opts.py
|
17
|
-
# If you are a user copying-and-pasting this as an example, make sure to either
|
18
|
-
# 1) create a local `user_opts.py`, or
|
19
|
-
# 2) delete the user_opts import below and replace all appearances of `user_opts` with the literal value
|
20
|
-
# (i.e., user_opts['swan']['username'] -> 'your_username')
|
21
|
-
from .user_opts import user_opts
|
22
|
-
|
23
|
-
config = Config(
|
24
|
-
executors=[
|
25
|
-
HighThroughputExecutor(
|
26
|
-
label='swan_htex',
|
27
|
-
encrypted=True,
|
28
|
-
provider=TorqueProvider(
|
29
|
-
channel=SSHChannel(
|
30
|
-
hostname='swan.cray.com',
|
31
|
-
username=user_opts['swan']['username'],
|
32
|
-
script_dir=user_opts['swan']['script_dir'],
|
33
|
-
),
|
34
|
-
nodes_per_block=1,
|
35
|
-
init_blocks=1,
|
36
|
-
max_blocks=1,
|
37
|
-
launcher=AprunLauncher(),
|
38
|
-
scheduler_options=user_opts['swan']['scheduler_options'],
|
39
|
-
worker_init=user_opts['swan']['worker_init'],
|
40
|
-
),
|
41
|
-
)
|
42
|
-
]
|
43
|
-
)
|
@@ -1,45 +0,0 @@
|
|
1
|
-
import os
|
2
|
-
|
3
|
-
from parsl.channels.ssh.ssh import SSHChannel as SSH
|
4
|
-
|
5
|
-
|
6
|
-
def connect_and_list(hostname, username):
|
7
|
-
out = ''
|
8
|
-
conn = SSH(hostname, username=username)
|
9
|
-
conn.push_file(os.path.abspath('remote_run.sh'), '/home/davidk/')
|
10
|
-
# ec, out, err = conn.execute_wait("ls /tmp/remote_run.sh; bash /tmp/remote_run.sh")
|
11
|
-
conn.close()
|
12
|
-
return out
|
13
|
-
|
14
|
-
|
15
|
-
script = '''#!/bin/bash
|
16
|
-
echo "Hostname: $HOSTNAME"
|
17
|
-
echo "Cpu info -----"
|
18
|
-
cat /proc/cpuinfo
|
19
|
-
echo "Done----------"
|
20
|
-
'''
|
21
|
-
|
22
|
-
|
23
|
-
def test_connect_1():
|
24
|
-
with open('remote_run.sh', 'w') as f:
|
25
|
-
f.write(script)
|
26
|
-
|
27
|
-
sites = {
|
28
|
-
'midway': {
|
29
|
-
'url': 'midway.rcc.uchicago.edu',
|
30
|
-
'uname': 'yadunand'
|
31
|
-
},
|
32
|
-
'swift': {
|
33
|
-
'url': 'swift.rcc.uchicago.edu',
|
34
|
-
'uname': 'yadunand'
|
35
|
-
}
|
36
|
-
}
|
37
|
-
|
38
|
-
for site in sites.values():
|
39
|
-
out = connect_and_list(site['url'], site['uname'])
|
40
|
-
print("Sitename :{0} hostname:{1}".format(site['url'], out))
|
41
|
-
|
42
|
-
|
43
|
-
if __name__ == "__main__":
|
44
|
-
|
45
|
-
test_connect_1()
|
@@ -1,40 +0,0 @@
|
|
1
|
-
from parsl.channels.ssh.ssh import SSHChannel as SSH
|
2
|
-
|
3
|
-
|
4
|
-
def connect_and_list(hostname, username):
|
5
|
-
conn = SSH(hostname, username=username)
|
6
|
-
ec, out, err = conn.execute_wait("echo $HOSTNAME")
|
7
|
-
conn.close()
|
8
|
-
return out
|
9
|
-
|
10
|
-
|
11
|
-
def test_midway():
|
12
|
-
''' Test ssh channels to midway
|
13
|
-
'''
|
14
|
-
url = 'midway.rcc.uchicago.edu'
|
15
|
-
uname = 'yadunand'
|
16
|
-
out = connect_and_list(url, uname)
|
17
|
-
print("Sitename :{0} hostname:{1}".format(url, out))
|
18
|
-
|
19
|
-
|
20
|
-
def test_beagle():
|
21
|
-
''' Test ssh channels to beagle
|
22
|
-
'''
|
23
|
-
url = 'login04.beagle.ci.uchicago.edu'
|
24
|
-
uname = 'yadunandb'
|
25
|
-
out = connect_and_list(url, uname)
|
26
|
-
print("Sitename :{0} hostname:{1}".format(url, out))
|
27
|
-
|
28
|
-
|
29
|
-
def test_osg():
|
30
|
-
''' Test ssh connectivity to osg
|
31
|
-
'''
|
32
|
-
url = 'login.osgconnect.net'
|
33
|
-
uname = 'yadunand'
|
34
|
-
out = connect_and_list(url, uname)
|
35
|
-
print("Sitename :{0} hostname:{1}".format(url, out))
|
36
|
-
|
37
|
-
|
38
|
-
if __name__ == "__main__":
|
39
|
-
|
40
|
-
pass
|
@@ -1,46 +0,0 @@
|
|
1
|
-
from parsl.channels.errors import BadHostKeyException, SSHException
|
2
|
-
from parsl.channels.ssh.ssh import SSHChannel as SSH
|
3
|
-
|
4
|
-
|
5
|
-
def connect_and_list(hostname, username):
|
6
|
-
conn = SSH(hostname, username=username)
|
7
|
-
ec, out, err = conn.execute_wait("echo $HOSTNAME")
|
8
|
-
conn.close()
|
9
|
-
return out
|
10
|
-
|
11
|
-
|
12
|
-
def test_error_1():
|
13
|
-
try:
|
14
|
-
connect_and_list("bad.url.gov", "ubuntu")
|
15
|
-
except Exception as e:
|
16
|
-
assert type(e) is SSHException, "Expected SSException, got: {0}".format(e)
|
17
|
-
|
18
|
-
|
19
|
-
def test_error_2():
|
20
|
-
try:
|
21
|
-
connect_and_list("swift.rcc.uchicago.edu", "mango")
|
22
|
-
except SSHException:
|
23
|
-
print("Caught the right exception")
|
24
|
-
else:
|
25
|
-
raise Exception("Expected SSException, got: {0}".format(e))
|
26
|
-
|
27
|
-
|
28
|
-
def test_error_3():
|
29
|
-
''' This should work
|
30
|
-
'''
|
31
|
-
try:
|
32
|
-
connect_and_list("edison.nersc.gov", "yadunand")
|
33
|
-
except BadHostKeyException as e:
|
34
|
-
print("Caught exception BadHostKeyException: ", e)
|
35
|
-
else:
|
36
|
-
assert False, "Expected SSException, got: {0}".format(e)
|
37
|
-
|
38
|
-
|
39
|
-
if __name__ == "__main__":
|
40
|
-
|
41
|
-
tests = [test_error_1, test_error_2, test_error_3]
|
42
|
-
|
43
|
-
for test in tests:
|
44
|
-
print("---------Running : {0}---------------".format(test))
|
45
|
-
test()
|
46
|
-
print("----------------------DONE--------------------------")
|
@@ -1,41 +0,0 @@
|
|
1
|
-
import parsl
|
2
|
-
from parsl.channels.ssh.ssh import SSHChannel as SSH
|
3
|
-
|
4
|
-
|
5
|
-
def connect_and_list(hostname, username):
|
6
|
-
conn = SSH(hostname, username=username)
|
7
|
-
ec, out, err = conn.execute_wait("echo $HOSTNAME")
|
8
|
-
conn.close()
|
9
|
-
return out
|
10
|
-
|
11
|
-
|
12
|
-
def test_push(conn, fname="test001.txt"):
|
13
|
-
|
14
|
-
with open(fname, 'w') as f:
|
15
|
-
f.write("Hello from parsl.ssh testing\n")
|
16
|
-
|
17
|
-
conn.push_file(fname, "/tmp")
|
18
|
-
ec, out, err = conn.execute_wait("ls /tmp/{0}".format(fname))
|
19
|
-
print(ec, out, err)
|
20
|
-
|
21
|
-
|
22
|
-
def test_pull(conn, fname="test001.txt"):
|
23
|
-
|
24
|
-
local = "foo"
|
25
|
-
conn.pull_file("/tmp/{0}".format(fname), local)
|
26
|
-
|
27
|
-
with open("{0}/{1}".format(local, fname), 'r') as f:
|
28
|
-
print(f.readlines())
|
29
|
-
|
30
|
-
|
31
|
-
if __name__ == "__main__":
|
32
|
-
|
33
|
-
parsl.set_stream_logger()
|
34
|
-
|
35
|
-
# This is for testing
|
36
|
-
conn = SSH("midway.rcc.uchicago.edu", username="yadunand")
|
37
|
-
|
38
|
-
test_push(conn)
|
39
|
-
test_pull(conn)
|
40
|
-
|
41
|
-
conn.close()
|
@@ -1,24 +0,0 @@
|
|
1
|
-
import parsl
|
2
|
-
from parsl.channels.ssh_il.ssh_il import SSHInteractiveLoginChannel as SSH
|
3
|
-
|
4
|
-
|
5
|
-
def connect_and_list(hostname, username):
|
6
|
-
conn = SSH(hostname, username=username)
|
7
|
-
ec, out, err = conn.execute_wait("echo $HOSTNAME")
|
8
|
-
conn.close()
|
9
|
-
return out
|
10
|
-
|
11
|
-
|
12
|
-
def test_cooley():
|
13
|
-
''' Test ssh channels to midway
|
14
|
-
'''
|
15
|
-
url = 'cooley.alcf.anl.gov'
|
16
|
-
uname = 'yadunand'
|
17
|
-
out = connect_and_list(url, uname)
|
18
|
-
print("Sitename :{0} hostname:{1}".format(url, out))
|
19
|
-
return
|
20
|
-
|
21
|
-
|
22
|
-
if __name__ == "__main__":
|
23
|
-
parsl.set_stream_logger()
|
24
|
-
test_cooley()
|
@@ -1,49 +0,0 @@
|
|
1
|
-
import parsl
|
2
|
-
from parsl import python_app
|
3
|
-
|
4
|
-
parsl.set_stream_logger()
|
5
|
-
|
6
|
-
from parsl.channels import SSHChannel
|
7
|
-
from parsl.config import Config
|
8
|
-
from parsl.executors import HighThroughputExecutor
|
9
|
-
from parsl.providers import AdHocProvider
|
10
|
-
|
11
|
-
remotes = ['midway2-login2.rcc.uchicago.edu', 'midway2-login1.rcc.uchicago.edu']
|
12
|
-
|
13
|
-
config = Config(
|
14
|
-
executors=[
|
15
|
-
HighThroughputExecutor(
|
16
|
-
label='AdHoc',
|
17
|
-
max_workers_per_node=2,
|
18
|
-
worker_logdir_root="/scratch/midway2/yadunand/parsl_scripts",
|
19
|
-
encrypted=True,
|
20
|
-
provider=AdHocProvider(
|
21
|
-
worker_init="source /scratch/midway2/yadunand/parsl_env_setup.sh",
|
22
|
-
channels=[SSHChannel(hostname=m,
|
23
|
-
username="yadunand",
|
24
|
-
script_dir="/scratch/midway2/yadunand/parsl_cluster")
|
25
|
-
for m in remotes]
|
26
|
-
)
|
27
|
-
)
|
28
|
-
]
|
29
|
-
)
|
30
|
-
|
31
|
-
|
32
|
-
@python_app
|
33
|
-
def platform(sleep=2, stdout=None):
|
34
|
-
import platform
|
35
|
-
import time
|
36
|
-
time.sleep(sleep)
|
37
|
-
return platform.uname()
|
38
|
-
|
39
|
-
|
40
|
-
def test_raw_provider():
|
41
|
-
|
42
|
-
parsl.load(config)
|
43
|
-
|
44
|
-
x = [platform() for i in range(10)]
|
45
|
-
print([i.result() for i in x])
|
46
|
-
|
47
|
-
|
48
|
-
if __name__ == "__main__":
|
49
|
-
test_raw_provider()
|
@@ -1,13 +0,0 @@
|
|
1
|
-
from parsl.channels import OAuthSSHChannel
|
2
|
-
|
3
|
-
|
4
|
-
def test_channel():
|
5
|
-
channel = OAuthSSHChannel(hostname='ssh.demo.globus.org', username='yadunand')
|
6
|
-
x, stdout, stderr = channel.execute_wait('ls')
|
7
|
-
print(x, stdout, stderr)
|
8
|
-
assert x == 0, "Expected exit code 0, got {}".format(x)
|
9
|
-
|
10
|
-
|
11
|
-
if __name__ == '__main__':
|
12
|
-
|
13
|
-
test_channel()
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|