parsl 2024.11.25__py3-none-any.whl → 2024.12.2__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/base.py +0 -28
- parsl/channels/local/local.py +0 -36
- parsl/configs/ASPIRE1.py +0 -1
- parsl/executors/high_throughput/executor.py +15 -2
- parsl/executors/high_throughput/zmq_pipes.py +13 -4
- parsl/providers/condor/condor.py +3 -5
- parsl/providers/grid_engine/grid_engine.py +2 -3
- parsl/providers/local/local.py +1 -15
- parsl/providers/lsf/lsf.py +2 -12
- parsl/providers/pbspro/pbspro.py +1 -3
- parsl/providers/slurm/slurm.py +1 -11
- parsl/providers/torque/torque.py +1 -3
- parsl/tests/configs/htex_local_alternate.py +0 -1
- parsl/tests/configs/local_threads_monitoring.py +0 -1
- parsl/tests/manual_tests/test_udp_simple.py +0 -1
- parsl/tests/test_monitoring/test_htex_init_blocks_vs_monitoring.py +0 -1
- parsl/tests/test_monitoring/test_stdouterr.py +0 -1
- parsl/version.py +1 -1
- {parsl-2024.11.25.dist-info → parsl-2024.12.2.dist-info}/METADATA +2 -2
- {parsl-2024.11.25.dist-info → parsl-2024.12.2.dist-info}/RECORD +28 -28
- {parsl-2024.11.25.data → parsl-2024.12.2.data}/scripts/exec_parsl_function.py +0 -0
- {parsl-2024.11.25.data → parsl-2024.12.2.data}/scripts/interchange.py +0 -0
- {parsl-2024.11.25.data → parsl-2024.12.2.data}/scripts/parsl_coprocess.py +0 -0
- {parsl-2024.11.25.data → parsl-2024.12.2.data}/scripts/process_worker_pool.py +0 -0
- {parsl-2024.11.25.dist-info → parsl-2024.12.2.dist-info}/LICENSE +0 -0
- {parsl-2024.11.25.dist-info → parsl-2024.12.2.dist-info}/WHEEL +0 -0
- {parsl-2024.11.25.dist-info → parsl-2024.12.2.dist-info}/entry_points.txt +0 -0
- {parsl-2024.11.25.dist-info → parsl-2024.12.2.dist-info}/top_level.txt +0 -0
parsl/channels/base.py
CHANGED
@@ -52,31 +52,3 @@ class Channel(metaclass=ABCMeta):
|
|
52
52
|
@script_dir.setter
|
53
53
|
def script_dir(self, value: str) -> None:
|
54
54
|
pass
|
55
|
-
|
56
|
-
@abstractmethod
|
57
|
-
def push_file(self, source: str, dest_dir: str) -> str:
|
58
|
-
''' Channel will take care of moving the file from source to the destination
|
59
|
-
directory
|
60
|
-
|
61
|
-
Args:
|
62
|
-
source (string) : Full filepath of the file to be moved
|
63
|
-
dest_dir (string) : Absolute path of the directory to move to
|
64
|
-
|
65
|
-
Returns:
|
66
|
-
destination_path (string)
|
67
|
-
'''
|
68
|
-
pass
|
69
|
-
|
70
|
-
@abstractmethod
|
71
|
-
def pull_file(self, remote_source: str, local_dir: str) -> str:
|
72
|
-
''' Transport file on the remote side to a local directory
|
73
|
-
|
74
|
-
Args:
|
75
|
-
remote_source (string): remote_source
|
76
|
-
local_dir (string): Local directory to copy to
|
77
|
-
|
78
|
-
|
79
|
-
Returns:
|
80
|
-
destination_path (string)
|
81
|
-
'''
|
82
|
-
pass
|
parsl/channels/local/local.py
CHANGED
@@ -1,10 +1,8 @@
|
|
1
1
|
import logging
|
2
2
|
import os
|
3
|
-
import shutil
|
4
3
|
import subprocess
|
5
4
|
|
6
5
|
from parsl.channels.base import Channel
|
7
|
-
from parsl.channels.errors import FileCopyException
|
8
6
|
from parsl.utils import RepresentationMixin
|
9
7
|
|
10
8
|
logger = logging.getLogger(__name__)
|
@@ -57,40 +55,6 @@ class LocalChannel(Channel, RepresentationMixin):
|
|
57
55
|
|
58
56
|
return (retcode, stdout.decode("utf-8"), stderr.decode("utf-8"))
|
59
57
|
|
60
|
-
def push_file(self, source, dest_dir):
|
61
|
-
''' If the source files dirpath is the same as dest_dir, a copy
|
62
|
-
is not necessary, and nothing is done. Else a copy is made.
|
63
|
-
|
64
|
-
Args:
|
65
|
-
- source (string) : Path to the source file
|
66
|
-
- dest_dir (string) : Path to the directory to which the files is to be copied
|
67
|
-
|
68
|
-
Returns:
|
69
|
-
- destination_path (String) : Absolute path of the destination file
|
70
|
-
|
71
|
-
Raises:
|
72
|
-
- FileCopyException : If file copy failed.
|
73
|
-
'''
|
74
|
-
|
75
|
-
local_dest = os.path.join(dest_dir, os.path.basename(source))
|
76
|
-
|
77
|
-
# Only attempt to copy if the target dir and source dir are different
|
78
|
-
if os.path.dirname(source) != dest_dir:
|
79
|
-
try:
|
80
|
-
shutil.copyfile(source, local_dest)
|
81
|
-
os.chmod(local_dest, 0o700)
|
82
|
-
|
83
|
-
except OSError as e:
|
84
|
-
raise FileCopyException(e, "localhost")
|
85
|
-
|
86
|
-
else:
|
87
|
-
os.chmod(local_dest, 0o700)
|
88
|
-
|
89
|
-
return local_dest
|
90
|
-
|
91
|
-
def pull_file(self, remote_source, local_dir):
|
92
|
-
return self.push_file(remote_source, local_dir)
|
93
|
-
|
94
58
|
@property
|
95
59
|
def script_dir(self):
|
96
60
|
return self._script_dir
|
parsl/configs/ASPIRE1.py
CHANGED
@@ -331,6 +331,9 @@ class HighThroughputExecutor(BlockProviderExecutor, RepresentationMixin, UsageIn
|
|
331
331
|
interchange_launch_cmd = DEFAULT_INTERCHANGE_LAUNCH_CMD
|
332
332
|
self.interchange_launch_cmd = interchange_launch_cmd
|
333
333
|
|
334
|
+
self._result_queue_thread_exit = threading.Event()
|
335
|
+
self._result_queue_thread: Optional[threading.Thread] = None
|
336
|
+
|
334
337
|
radio_mode = "htex"
|
335
338
|
enable_mpi_mode: bool = False
|
336
339
|
mpi_launcher: str = "mpiexec"
|
@@ -455,9 +458,11 @@ class HighThroughputExecutor(BlockProviderExecutor, RepresentationMixin, UsageIn
|
|
455
458
|
"""
|
456
459
|
logger.debug("Result queue worker starting")
|
457
460
|
|
458
|
-
while not self.bad_state_is_set:
|
461
|
+
while not self.bad_state_is_set and not self._result_queue_thread_exit.is_set():
|
459
462
|
try:
|
460
|
-
msgs = self.incoming_q.get()
|
463
|
+
msgs = self.incoming_q.get(timeout_ms=self.poll_period)
|
464
|
+
if msgs is None: # timeout
|
465
|
+
continue
|
461
466
|
|
462
467
|
except IOError as e:
|
463
468
|
logger.exception("Caught broken queue with exception code {}: {}".format(e.errno, e))
|
@@ -515,6 +520,8 @@ class HighThroughputExecutor(BlockProviderExecutor, RepresentationMixin, UsageIn
|
|
515
520
|
else:
|
516
521
|
raise BadMessage("Message received with unknown type {}".format(msg['type']))
|
517
522
|
|
523
|
+
logger.info("Closing result ZMQ pipe")
|
524
|
+
self.incoming_q.close()
|
518
525
|
logger.info("Result queue worker finished")
|
519
526
|
|
520
527
|
def _start_local_interchange_process(self) -> None:
|
@@ -817,6 +824,8 @@ class HighThroughputExecutor(BlockProviderExecutor, RepresentationMixin, UsageIn
|
|
817
824
|
|
818
825
|
logger.info("Attempting HighThroughputExecutor shutdown")
|
819
826
|
|
827
|
+
logger.info("Terminating interchange and result queue thread")
|
828
|
+
self._result_queue_thread_exit.set()
|
820
829
|
self.interchange_proc.terminate()
|
821
830
|
try:
|
822
831
|
self.interchange_proc.wait(timeout=timeout)
|
@@ -841,6 +850,10 @@ class HighThroughputExecutor(BlockProviderExecutor, RepresentationMixin, UsageIn
|
|
841
850
|
logger.info("Closing command client")
|
842
851
|
self.command_client.close()
|
843
852
|
|
853
|
+
logger.info("Waiting for result queue thread exit")
|
854
|
+
if self._result_queue_thread:
|
855
|
+
self._result_queue_thread.join()
|
856
|
+
|
844
857
|
logger.info("Finished HighThroughputExecutor shutdown attempt")
|
845
858
|
|
846
859
|
def get_usage_information(self):
|
@@ -206,12 +206,21 @@ class ResultsIncoming:
|
|
206
206
|
self.port = self.results_receiver.bind_to_random_port(tcp_url(ip_address),
|
207
207
|
min_port=port_range[0],
|
208
208
|
max_port=port_range[1])
|
209
|
+
self.poller = zmq.Poller()
|
210
|
+
self.poller.register(self.results_receiver, zmq.POLLIN)
|
209
211
|
|
210
|
-
def get(self):
|
212
|
+
def get(self, timeout_ms=None):
|
213
|
+
"""Get a message from the queue, returning None if timeout expires
|
214
|
+
without a message. timeout is measured in milliseconds.
|
215
|
+
"""
|
211
216
|
logger.debug("Waiting for ResultsIncoming message")
|
212
|
-
|
213
|
-
|
214
|
-
|
217
|
+
socks = dict(self.poller.poll(timeout=timeout_ms))
|
218
|
+
if self.results_receiver in socks and socks[self.results_receiver] == zmq.POLLIN:
|
219
|
+
m = self.results_receiver.recv_multipart()
|
220
|
+
logger.debug("Received ResultsIncoming message")
|
221
|
+
return m
|
222
|
+
else:
|
223
|
+
return None
|
215
224
|
|
216
225
|
def close(self):
|
217
226
|
self.results_receiver.close()
|
parsl/providers/condor/condor.py
CHANGED
@@ -245,16 +245,14 @@ class CondorProvider(RepresentationMixin, ClusterProvider):
|
|
245
245
|
with open(userscript_path, 'w') as f:
|
246
246
|
f.write(job_config["worker_init"] + '\n' + wrapped_command)
|
247
247
|
|
248
|
-
|
249
|
-
the_input_files = [user_script_path] + self.transfer_input_files
|
248
|
+
the_input_files = [userscript_path] + self.transfer_input_files
|
250
249
|
job_config["input_files"] = ','.join(the_input_files)
|
251
|
-
job_config["job_script"] = os.path.basename(
|
250
|
+
job_config["job_script"] = os.path.basename(userscript_path)
|
252
251
|
|
253
252
|
# Construct and move the submit script
|
254
253
|
self._write_submit_script(template_string, script_path, job_name, job_config)
|
255
|
-
channel_script_path = self.channel.push_file(script_path, self.channel.script_dir)
|
256
254
|
|
257
|
-
cmd = "condor_submit {0}".format(
|
255
|
+
cmd = "condor_submit {0}".format(script_path)
|
258
256
|
try:
|
259
257
|
retcode, stdout, stderr = self.execute_wait(cmd)
|
260
258
|
except Exception as e:
|
@@ -142,11 +142,10 @@ class GridEngineProvider(ClusterProvider, RepresentationMixin):
|
|
142
142
|
logger.debug("Writing submit script")
|
143
143
|
self._write_submit_script(template_string, script_path, job_name, job_config)
|
144
144
|
|
145
|
-
channel_script_path = self.channel.push_file(script_path, self.channel.script_dir)
|
146
145
|
if self.queue is not None:
|
147
|
-
cmd = "qsub -q {0} -terse {1}".format(self.queue,
|
146
|
+
cmd = "qsub -q {0} -terse {1}".format(self.queue, script_path)
|
148
147
|
else:
|
149
|
-
cmd = "qsub -terse {0}".format(
|
148
|
+
cmd = "qsub -terse {0}".format(script_path)
|
150
149
|
retcode, stdout, stderr = self.execute_wait(cmd)
|
151
150
|
|
152
151
|
if retcode == 0:
|
parsl/providers/local/local.py
CHANGED
@@ -32,9 +32,6 @@ class LocalProvider(ExecutionProvider, RepresentationMixin):
|
|
32
32
|
Ratio of provisioned task slots to active tasks. A parallelism value of 1 represents aggressive
|
33
33
|
scaling where as many resources as possible are used; parallelism close to 0 represents
|
34
34
|
the opposite situation in which as few resources as possible (i.e., min_blocks) are used.
|
35
|
-
move_files : Optional[Bool]
|
36
|
-
Should files be moved? By default, Parsl will try to figure this out itself (= None).
|
37
|
-
If True, then will always move. If False, will never move.
|
38
35
|
worker_init : str
|
39
36
|
Command to be run before starting a worker, such as 'module load Anaconda; source activate env'.
|
40
37
|
"""
|
@@ -48,8 +45,7 @@ class LocalProvider(ExecutionProvider, RepresentationMixin):
|
|
48
45
|
max_blocks=1,
|
49
46
|
worker_init='',
|
50
47
|
cmd_timeout=30,
|
51
|
-
parallelism=1
|
52
|
-
move_files=None):
|
48
|
+
parallelism=1):
|
53
49
|
self.channel = channel
|
54
50
|
self._label = 'local'
|
55
51
|
self.nodes_per_block = nodes_per_block
|
@@ -61,7 +57,6 @@ class LocalProvider(ExecutionProvider, RepresentationMixin):
|
|
61
57
|
self.parallelism = parallelism
|
62
58
|
self.script_dir = None
|
63
59
|
self.cmd_timeout = cmd_timeout
|
64
|
-
self.move_files = move_files
|
65
60
|
|
66
61
|
# Dictionary that keeps track of jobs, keyed on job_id
|
67
62
|
self.resources = {}
|
@@ -83,7 +78,6 @@ class LocalProvider(ExecutionProvider, RepresentationMixin):
|
|
83
78
|
if job_dict['status'] and job_dict['status'].terminal:
|
84
79
|
# We already checked this and it can't change after that
|
85
80
|
continue
|
86
|
-
# Script path should point to remote path if _should_move_files() is True
|
87
81
|
script_path = job_dict['script_path']
|
88
82
|
|
89
83
|
alive = self._is_alive(job_dict)
|
@@ -137,8 +131,6 @@ class LocalProvider(ExecutionProvider, RepresentationMixin):
|
|
137
131
|
|
138
132
|
def _job_file_path(self, script_path: str, suffix: str) -> str:
|
139
133
|
path = '{0}{1}'.format(script_path, suffix)
|
140
|
-
if self._should_move_files():
|
141
|
-
path = self.channel.pull_file(path, self.script_dir)
|
142
134
|
return path
|
143
135
|
|
144
136
|
def _read_job_file(self, script_path: str, suffix: str) -> str:
|
@@ -216,9 +208,6 @@ class LocalProvider(ExecutionProvider, RepresentationMixin):
|
|
216
208
|
|
217
209
|
job_id = None
|
218
210
|
remote_pid = None
|
219
|
-
if self._should_move_files():
|
220
|
-
logger.debug("Pushing start script")
|
221
|
-
script_path = self.channel.push_file(script_path, self.channel.script_dir)
|
222
211
|
|
223
212
|
logger.debug("Launching")
|
224
213
|
# We need to capture the exit code and the streams, so we put them in files. We also write
|
@@ -254,9 +243,6 @@ class LocalProvider(ExecutionProvider, RepresentationMixin):
|
|
254
243
|
|
255
244
|
return job_id
|
256
245
|
|
257
|
-
def _should_move_files(self):
|
258
|
-
return (self.move_files is None and not isinstance(self.channel, LocalChannel)) or (self.move_files)
|
259
|
-
|
260
246
|
def cancel(self, job_ids):
|
261
247
|
''' Cancels the jobs specified by a list of job ids
|
262
248
|
|
parsl/providers/lsf/lsf.py
CHANGED
@@ -68,7 +68,6 @@ class LSFProvider(ClusterProvider, RepresentationMixin):
|
|
68
68
|
:class:`~parsl.launchers.SingleNodeLauncher` (the default),
|
69
69
|
:class:`~parsl.launchers.SrunLauncher`, or
|
70
70
|
:class:`~parsl.launchers.AprunLauncher`
|
71
|
-
move_files : Optional[Bool]: should files be moved? by default, Parsl will try to move files.
|
72
71
|
bsub_redirection: Bool
|
73
72
|
Should a redirection symbol "<" be included when submitting jobs, i.e., Bsub < job_script.
|
74
73
|
request_by_nodes: Bool
|
@@ -92,7 +91,6 @@ class LSFProvider(ClusterProvider, RepresentationMixin):
|
|
92
91
|
project=None,
|
93
92
|
queue=None,
|
94
93
|
cmd_timeout=120,
|
95
|
-
move_files=True,
|
96
94
|
bsub_redirection=False,
|
97
95
|
request_by_nodes=True,
|
98
96
|
launcher=SingleNodeLauncher()):
|
@@ -112,7 +110,6 @@ class LSFProvider(ClusterProvider, RepresentationMixin):
|
|
112
110
|
self.queue = queue
|
113
111
|
self.cores_per_block = cores_per_block
|
114
112
|
self.cores_per_node = cores_per_node
|
115
|
-
self.move_files = move_files
|
116
113
|
self.bsub_redirection = bsub_redirection
|
117
114
|
self.request_by_nodes = request_by_nodes
|
118
115
|
|
@@ -230,17 +227,10 @@ class LSFProvider(ClusterProvider, RepresentationMixin):
|
|
230
227
|
logger.debug("Writing submit script")
|
231
228
|
self._write_submit_script(template_string, script_path, job_name, job_config)
|
232
229
|
|
233
|
-
if self.move_files:
|
234
|
-
logger.debug("moving files")
|
235
|
-
channel_script_path = self.channel.push_file(script_path, self.channel.script_dir)
|
236
|
-
else:
|
237
|
-
logger.debug("not moving files")
|
238
|
-
channel_script_path = script_path
|
239
|
-
|
240
230
|
if self.bsub_redirection:
|
241
|
-
cmd = "bsub < {0}".format(
|
231
|
+
cmd = "bsub < {0}".format(script_path)
|
242
232
|
else:
|
243
|
-
cmd = "bsub {0}".format(
|
233
|
+
cmd = "bsub {0}".format(script_path)
|
244
234
|
retcode, stdout, stderr = super().execute_wait(cmd)
|
245
235
|
|
246
236
|
job_id = None
|
parsl/providers/pbspro/pbspro.py
CHANGED
@@ -183,15 +183,13 @@ class PBSProProvider(TorqueProvider):
|
|
183
183
|
logger.debug("Writing submit script")
|
184
184
|
self._write_submit_script(self.template_string, script_path, job_name, job_config)
|
185
185
|
|
186
|
-
channel_script_path = self.channel.push_file(script_path, self.channel.script_dir)
|
187
|
-
|
188
186
|
submit_options = ''
|
189
187
|
if self.queue is not None:
|
190
188
|
submit_options = '{0} -q {1}'.format(submit_options, self.queue)
|
191
189
|
if self.account is not None:
|
192
190
|
submit_options = '{0} -A {1}'.format(submit_options, self.account)
|
193
191
|
|
194
|
-
launch_cmd = "qsub {0} {1}".format(submit_options,
|
192
|
+
launch_cmd = "qsub {0} {1}".format(submit_options, script_path)
|
195
193
|
retcode, stdout, stderr = self.execute_wait(launch_cmd)
|
196
194
|
|
197
195
|
job_id = None
|
parsl/providers/slurm/slurm.py
CHANGED
@@ -110,7 +110,6 @@ class SlurmProvider(ClusterProvider, RepresentationMixin):
|
|
110
110
|
:class:`~parsl.launchers.SingleNodeLauncher` (the default),
|
111
111
|
:class:`~parsl.launchers.SrunLauncher`, or
|
112
112
|
:class:`~parsl.launchers.AprunLauncher`
|
113
|
-
move_files : Optional[Bool]: should files be moved? by default, Parsl will try to move files.
|
114
113
|
"""
|
115
114
|
|
116
115
|
@typeguard.typechecked
|
@@ -134,7 +133,6 @@ class SlurmProvider(ClusterProvider, RepresentationMixin):
|
|
134
133
|
worker_init: str = '',
|
135
134
|
cmd_timeout: int = 10,
|
136
135
|
exclusive: bool = True,
|
137
|
-
move_files: bool = True,
|
138
136
|
launcher: Launcher = SingleNodeLauncher()):
|
139
137
|
label = 'slurm'
|
140
138
|
super().__init__(label,
|
@@ -152,7 +150,6 @@ class SlurmProvider(ClusterProvider, RepresentationMixin):
|
|
152
150
|
self.cores_per_node = cores_per_node
|
153
151
|
self.mem_per_node = mem_per_node
|
154
152
|
self.exclusive = exclusive
|
155
|
-
self.move_files = move_files
|
156
153
|
self.account = account
|
157
154
|
self.qos = qos
|
158
155
|
self.constraint = constraint
|
@@ -308,14 +305,7 @@ class SlurmProvider(ClusterProvider, RepresentationMixin):
|
|
308
305
|
logger.debug("Writing submit script")
|
309
306
|
self._write_submit_script(template_string, script_path, job_name, job_config)
|
310
307
|
|
311
|
-
|
312
|
-
logger.debug("moving files")
|
313
|
-
channel_script_path = self.channel.push_file(script_path, self.channel.script_dir)
|
314
|
-
else:
|
315
|
-
logger.debug("not moving files")
|
316
|
-
channel_script_path = script_path
|
317
|
-
|
318
|
-
retcode, stdout, stderr = self.execute_wait("sbatch {0}".format(channel_script_path))
|
308
|
+
retcode, stdout, stderr = self.execute_wait("sbatch {0}".format(script_path))
|
319
309
|
|
320
310
|
if retcode == 0:
|
321
311
|
for line in stdout.split('\n'):
|
parsl/providers/torque/torque.py
CHANGED
@@ -189,15 +189,13 @@ class TorqueProvider(ClusterProvider, RepresentationMixin):
|
|
189
189
|
logger.debug("Writing submit script")
|
190
190
|
self._write_submit_script(self.template_string, script_path, job_name, job_config)
|
191
191
|
|
192
|
-
channel_script_path = self.channel.push_file(script_path, self.channel.script_dir)
|
193
|
-
|
194
192
|
submit_options = ''
|
195
193
|
if self.queue is not None:
|
196
194
|
submit_options = '{0} -q {1}'.format(submit_options, self.queue)
|
197
195
|
if self.account is not None:
|
198
196
|
submit_options = '{0} -A {1}'.format(submit_options, self.account)
|
199
197
|
|
200
|
-
launch_cmd = "qsub {0} {1}".format(submit_options,
|
198
|
+
launch_cmd = "qsub {0} {1}".format(submit_options, script_path)
|
201
199
|
retcode, stdout, stderr = self.execute_wait(launch_cmd)
|
202
200
|
|
203
201
|
job_id = None
|
parsl/version.py
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: parsl
|
3
|
-
Version: 2024.
|
3
|
+
Version: 2024.12.2
|
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.12.02.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=rMLKeadEsQ9jGwm4ogqiLIXPS3zOAyfznQJXVkJSY8E,13107
|
11
|
-
parsl/version.py,sha256=
|
11
|
+
parsl/version.py,sha256=UgxB7Y94Y4uQa22_-KLUAVaxk2cd-RvyTYFGEkOrMVc,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
|
@@ -18,12 +18,12 @@ 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
20
|
parsl/channels/__init__.py,sha256=OEZcuNBOxUwmzrHMZOuPvkw4kUxrbJDA99crDk61O90,131
|
21
|
-
parsl/channels/base.py,sha256=
|
21
|
+
parsl/channels/base.py,sha256=KE41WF7d6BI7LkAwaCLv7ebwKz80bJ7awsavfXXcnnI,1874
|
22
22
|
parsl/channels/errors.py,sha256=AgyPwYjemBh_KjI3P-gXMgDgbvLZUMC2Wf284S_vQ6c,802
|
23
23
|
parsl/channels/local/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
24
|
-
parsl/channels/local/local.py,sha256=
|
24
|
+
parsl/channels/local/local.py,sha256=5dqPK6VjPBApbDant_i0vVUOeBaVWiYpGM39Vmz7o3Y,2120
|
25
25
|
parsl/concurrent/__init__.py,sha256=TvIVceJYaJAsxedNBF3Vdo9lEQNHH_j3uxJv0zUjP7w,3288
|
26
|
-
parsl/configs/ASPIRE1.py,sha256=
|
26
|
+
parsl/configs/ASPIRE1.py,sha256=nQm6BvCPE07YXEsC94wMrHeVAyYcyfvPgWyHIysjAoA,1690
|
27
27
|
parsl/configs/Azure.py,sha256=CJms3xWmdb-S3CksbHrPF2TfMxJC5I0faqUKCOzVg0k,1268
|
28
28
|
parsl/configs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
29
29
|
parsl/configs/bridges.py,sha256=NsTvCiHZHbJj-BsOXOpgS4hCblCHW_lnMa_VMb3SIww,1523
|
@@ -75,7 +75,7 @@ parsl/executors/flux/executor.py,sha256=8_xakLUu5zNJAHL0LbeTCFEWqWzRK1eE-3ep4GII
|
|
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=Sak8e8UpiEcXefUjMHbhyXc4Rn7kJtOoh7L8wreBQdk,1638
|
78
|
-
parsl/executors/high_throughput/executor.py,sha256=
|
78
|
+
parsl/executors/high_throughput/executor.py,sha256=kueKbVVblvXcbXsHEnmQXMkvdfuF6IpwV7-clp2Tkzk,38393
|
79
79
|
parsl/executors/high_throughput/interchange.py,sha256=WXpSVTfx6OCk8ZUChd01i4BF6R4xu-ewcvzEMgnTWLw,30098
|
80
80
|
parsl/executors/high_throughput/manager_record.py,sha256=yn3L8TUJFkgm2lX1x0SeS9mkvJowC0s2VIMCFiU7ThM,455
|
81
81
|
parsl/executors/high_throughput/manager_selector.py,sha256=UKcUE6v0tO7PDMTThpKSKxVpOpOUilxDL7UbNgpZCxo,2116
|
@@ -85,7 +85,7 @@ parsl/executors/high_throughput/mpi_prefix_composer.py,sha256=DmpKugANNa1bdYlqQB
|
|
85
85
|
parsl/executors/high_throughput/mpi_resource_management.py,sha256=hqotZLn3Q_iPRfMVmvvpKiGdguw55iYq1L_Gp9x6y4Y,7790
|
86
86
|
parsl/executors/high_throughput/probe.py,sha256=QOEaliO3x5cB6ltMOZMsZQ-ath9AAuFqXcBzRgWOM60,2754
|
87
87
|
parsl/executors/high_throughput/process_worker_pool.py,sha256=3zXe3_X5GvbTOlfeJJD_E0ssfJqkAfkqXHfeU7mymdI,41865
|
88
|
-
parsl/executors/high_throughput/zmq_pipes.py,sha256=
|
88
|
+
parsl/executors/high_throughput/zmq_pipes.py,sha256=XtNTxbnt9UHfhiduj9f3UkviYRebUy4ierhEGvowB8k,9040
|
89
89
|
parsl/executors/radical/__init__.py,sha256=CKbtV2numw5QvgIBq1htMUrt9TqDCIC2zifyf2svTNU,186
|
90
90
|
parsl/executors/radical/executor.py,sha256=426cMt6d8uJFZ_7Ub1kCslaND4OKtBX5WZdz-0RXjMk,22554
|
91
91
|
parsl/executors/radical/rpex_resources.py,sha256=Q7-0u3K447LBCe2y7mVcdw6jqWI7SdPXxCKhkr6FoRQ,5139
|
@@ -158,30 +158,30 @@ parsl/providers/azure/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3h
|
|
158
158
|
parsl/providers/azure/azure.py,sha256=eJKJ7Eeq9iUSAlkTczIDyM-OPyNtwnoZzdUbC0fgvDU,18372
|
159
159
|
parsl/providers/azure/template.py,sha256=JJNW8zr30uYcfK-RqQX2FHZVWrxvYE8E6VbaYuAFEqw,347
|
160
160
|
parsl/providers/condor/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
161
|
-
parsl/providers/condor/condor.py,sha256=
|
161
|
+
parsl/providers/condor/condor.py,sha256=EjJK9mi84XP6T69u74YG_97SwSQEYDYsv9p_xXpTz9I,12788
|
162
162
|
parsl/providers/condor/template.py,sha256=Jm2ezWo7ERMNPFvjLLEriaP5n5kD0vQBnikn9kpUTdU,960
|
163
163
|
parsl/providers/googlecloud/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
164
164
|
parsl/providers/googlecloud/googlecloud.py,sha256=xq269Y6Fj8DZabq5I5HtMhZw-3vNKXgisqalZhuHm8o,8007
|
165
165
|
parsl/providers/grid_engine/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
166
|
-
parsl/providers/grid_engine/grid_engine.py,sha256=
|
166
|
+
parsl/providers/grid_engine/grid_engine.py,sha256=hFyS4QRMlTXGngg-mHRSQ2GcHeE4PuWqkRN3v_bRDTI,8262
|
167
167
|
parsl/providers/grid_engine/template.py,sha256=a7iViKr8LXcFTPmsf_qQeVK5o_RekOAIlUOF0X1q-2M,273
|
168
168
|
parsl/providers/kubernetes/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
169
169
|
parsl/providers/kubernetes/kube.py,sha256=ghOKM1gY1UjzMzWAheKsG15u8oUzRkXUyjtpqjkquIo,14952
|
170
170
|
parsl/providers/kubernetes/template.py,sha256=VsRz6cmNaII-y4OdMT6sCwzQy95SJX6NMB0hmmFBhX4,50
|
171
171
|
parsl/providers/local/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
172
|
-
parsl/providers/local/local.py,sha256=
|
172
|
+
parsl/providers/local/local.py,sha256=Buxrjj9ukc9C8AeSggHd58o6-Pgy-QdBhDBCCt_hJ4k,10617
|
173
173
|
parsl/providers/lsf/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
174
|
-
parsl/providers/lsf/lsf.py,sha256=
|
174
|
+
parsl/providers/lsf/lsf.py,sha256=nQtkNTcGa1XgXn4btJ4eyy_vw2NmlpxJC53dR9_jKSQ,10851
|
175
175
|
parsl/providers/lsf/template.py,sha256=leQ_TpXv7ePMzbHfLaWvqMR0VORxlp-hjX5JxtkcwwU,269
|
176
176
|
parsl/providers/pbspro/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
177
|
-
parsl/providers/pbspro/pbspro.py,sha256=
|
177
|
+
parsl/providers/pbspro/pbspro.py,sha256=OVV0irDgTU60kY40YQKaqiiUCkXsfuwSVVikO4FPCOk,8498
|
178
178
|
parsl/providers/pbspro/template.py,sha256=y-Dher--t5Eury-c7cAuSZs9FEUXWiruFUI07v81558,315
|
179
179
|
parsl/providers/slurm/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
180
|
-
parsl/providers/slurm/slurm.py,sha256=
|
180
|
+
parsl/providers/slurm/slurm.py,sha256=nZ1k4vrS829kPdvMKSRhRcVRxBaGgJOSWqq6WyrVHps,15987
|
181
181
|
parsl/providers/slurm/template.py,sha256=KpgBEFMc1ps-38jdrk13xUGx9TCivu-iF90jgQDdiEQ,315
|
182
182
|
parsl/providers/torque/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
183
183
|
parsl/providers/torque/template.py,sha256=4qfc2gmlEhRCAD7erFDOs4prJQ43I8s4E8DSUSVQx3A,358
|
184
|
-
parsl/providers/torque/torque.py,sha256=
|
184
|
+
parsl/providers/torque/torque.py,sha256=THVgBryeDQhvjcxBKV9RN-7w6Ety6l82MhZVlkkyyNY,9201
|
185
185
|
parsl/serialize/__init__.py,sha256=-tQNsFsHTfWxZL6iydt08S9t8QP2rk9Q6RKnXYwbkfY,406
|
186
186
|
parsl/serialize/base.py,sha256=5GyJRr3PQohp5Zv9YQUEyes61mfUK7wTctTaXITYpSQ,1082
|
187
187
|
parsl/serialize/concretes.py,sha256=JPWmltkm-XH2S22ugXCYWYmxwukCUEXWYKzPkKXJO60,1911
|
@@ -210,7 +210,7 @@ parsl/tests/configs/ec2_spot.py,sha256=NKDCKgKxYNOHGVLBl2DFfiUwkR6xQnyhNb_E04TBs
|
|
210
210
|
parsl/tests/configs/flux_local.py,sha256=xliKQfB5FFpfNHWYEHoA8FKOTVHFCXVhWNuKQ5VJNTk,182
|
211
211
|
parsl/tests/configs/frontera.py,sha256=VXaRcvsi9ZjqJHi71BbKXSJBuQXdhCzPxXKW7H3LRBI,1567
|
212
212
|
parsl/tests/configs/htex_local.py,sha256=xDjEMktlv_CEwzKlRiBKcZcoT6ttc-vYfjYEvkD8oLk,759
|
213
|
-
parsl/tests/configs/htex_local_alternate.py,sha256=
|
213
|
+
parsl/tests/configs/htex_local_alternate.py,sha256=hlSn65Grv9gEsCErZ4JhF0hPo_tBbo72EVPHykfNVEA,2537
|
214
214
|
parsl/tests/configs/htex_local_intask_staging.py,sha256=E7uZD_AIAbxavkw4VrVXlGG7k42YJZv2qluAO-W0VvI,886
|
215
215
|
parsl/tests/configs/htex_local_rsync_staging.py,sha256=cqTRcHLjqYnOL07Lb8ecTzQuzP-dWDpWdKhgtTwo-fU,940
|
216
216
|
parsl/tests/configs/local_radical.py,sha256=C70I6ssfaaHEY1MMCC77izpp6sdANALH-P2mDR2msN0,417
|
@@ -223,7 +223,7 @@ parsl/tests/configs/local_threads_checkpoint_task_exit.py,sha256=zHKN68T-xhAVQwQ
|
|
223
223
|
parsl/tests/configs/local_threads_ftp_in_task.py,sha256=c9odRbxgj1bM_ttpkWTh2Ch_MV7f5cmn-68BOjLeJ70,444
|
224
224
|
parsl/tests/configs/local_threads_globus.py,sha256=NhY27cD4vcqLh762Ye0BINZnt63EmTyHXg7FQMffOBw,1097
|
225
225
|
parsl/tests/configs/local_threads_http_in_task.py,sha256=csDY-C50tXKO2ntbbPBvppCRlXBcB7UCQOHN_FyfFYc,447
|
226
|
-
parsl/tests/configs/local_threads_monitoring.py,sha256=
|
226
|
+
parsl/tests/configs/local_threads_monitoring.py,sha256=me-wWCtDwg_CGLQ7j4JRXcc_YTq3FGrffznjht07L08,368
|
227
227
|
parsl/tests/configs/local_threads_no_cache.py,sha256=2LM8rYhl62LIFUMjAs2_VI_R25YW5AI3RfVK_e5bdN8,236
|
228
228
|
parsl/tests/configs/midway.py,sha256=ZLdAUDR5paPA8gheRNLI0q9Vj5HcnCYuIttu-C-TlJs,1335
|
229
229
|
parsl/tests/configs/nscc_singapore.py,sha256=ECENZcBuCjkY6OWZstEMhfMrmjRmjCc7ELdfGEp7ly4,1481
|
@@ -248,7 +248,7 @@ parsl/tests/manual_tests/test_basic.py,sha256=3uCS9BqaZmKTNtNfJSsJIg2exlTAdC0Sdc
|
|
248
248
|
parsl/tests/manual_tests/test_log_filter.py,sha256=jwKclAVuESdlGK_giBuHDkY6ryX6rZB7q01lXT5K0XU,1872
|
249
249
|
parsl/tests/manual_tests/test_memory_limits.py,sha256=XGV_YmIeiGMt1HWYS0Zxo-XkVoKsvHhl11_U3MTg1KI,2677
|
250
250
|
parsl/tests/manual_tests/test_regression_220.py,sha256=Jo2puWt1W0r1rJfaJFgd2ZPgR3i6uOXzrLRcfYDZWDo,931
|
251
|
-
parsl/tests/manual_tests/test_udp_simple.py,sha256=
|
251
|
+
parsl/tests/manual_tests/test_udp_simple.py,sha256=cleSqvzblTFN6sCG0egQtLYVSQeCo7JMpCMjYKjBZUw,1009
|
252
252
|
parsl/tests/manual_tests/test_worker_count.py,sha256=Cv8nAWMXAREiiGEBUr_8JyI87ffp8JGAyDqVXzcjX_0,2072
|
253
253
|
parsl/tests/scaling_tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
254
254
|
parsl/tests/scaling_tests/htex_local.py,sha256=Gnt03qnzJrXWKqnD0auBJVAI2crq4JaihnLWf_J3luk,563
|
@@ -337,10 +337,10 @@ parsl/tests/test_monitoring/test_app_names.py,sha256=ayyxySGWpKSe9dDw2UeJo1dicxj
|
|
337
337
|
parsl/tests/test_monitoring/test_basic.py,sha256=VdF6JHfqsEOIMg-ysIAREgygZIjHWNDVLNVQ7jhWxmQ,4592
|
338
338
|
parsl/tests/test_monitoring/test_db_locks.py,sha256=3s3c1xhKo230ZZIJ3f1Ca4U7LcEdXnanOGVXQyNlk2U,2895
|
339
339
|
parsl/tests/test_monitoring/test_fuzz_zmq.py,sha256=--3-pQUvXXbkr8v_BEJoPvVvNly1oXvrD2nJh6yl_0M,3436
|
340
|
-
parsl/tests/test_monitoring/test_htex_init_blocks_vs_monitoring.py,sha256=
|
340
|
+
parsl/tests/test_monitoring/test_htex_init_blocks_vs_monitoring.py,sha256=KZ5Aqh0mU_L2HOU1I2oAyr9PJy1j_LNnogIffpcfNkA,2706
|
341
341
|
parsl/tests/test_monitoring/test_incomplete_futures.py,sha256=ZnO1sFSwlWUBHX64C_zwfTVRVC_UFNlU4h0POgx6NEo,2005
|
342
342
|
parsl/tests/test_monitoring/test_memoization_representation.py,sha256=dknv2nO7pNZ1jGxWGsC_AW3rs90gjMIeC5d7pIJ75Xc,2645
|
343
|
-
parsl/tests/test_monitoring/test_stdouterr.py,sha256=
|
343
|
+
parsl/tests/test_monitoring/test_stdouterr.py,sha256=9jlzeWU7csjPmcaC09RR6i9U8eTLdUm_R_hTGli0k58,4458
|
344
344
|
parsl/tests/test_monitoring/test_viz_colouring.py,sha256=83Qdmn3gM0j7IL6kPDcuIsp_nl4zj-liPijyIN632SY,592
|
345
345
|
parsl/tests/test_mpi_apps/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
346
346
|
parsl/tests/test_mpi_apps/test_bad_mpi_config.py,sha256=QKvEUSrHIBrvqu2fRj1MAqxsYxDfcrdQ7dzWdOZejuU,1320
|
@@ -451,13 +451,13 @@ parsl/usage_tracking/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hS
|
|
451
451
|
parsl/usage_tracking/api.py,sha256=iaCY58Dc5J4UM7_dJzEEs871P1p1HdxBMtNGyVdzc9g,1821
|
452
452
|
parsl/usage_tracking/levels.py,sha256=xbfzYEsd55KiZJ-mzNgPebvOH4rRHum04hROzEf41tU,291
|
453
453
|
parsl/usage_tracking/usage.py,sha256=tcoZ2OUjsQVakG8Uu9_HFuEdzpSHyt4JarSRcLGnSMw,8918
|
454
|
-
parsl-2024.
|
455
|
-
parsl-2024.
|
456
|
-
parsl-2024.
|
457
|
-
parsl-2024.
|
458
|
-
parsl-2024.
|
459
|
-
parsl-2024.
|
460
|
-
parsl-2024.
|
461
|
-
parsl-2024.
|
462
|
-
parsl-2024.
|
463
|
-
parsl-2024.
|
454
|
+
parsl-2024.12.2.data/scripts/exec_parsl_function.py,sha256=YXKVVIa4zXmOtz-0Ca4E_5nQfN_3S2bh2tB75uZZB4w,7774
|
455
|
+
parsl-2024.12.2.data/scripts/interchange.py,sha256=uRG_3K-XcSHzCNzI1_ab9k9UUiuy6llITgG1BF1N_Mw,30085
|
456
|
+
parsl-2024.12.2.data/scripts/parsl_coprocess.py,sha256=zrVjEqQvFOHxsLufPi00xzMONagjVwLZbavPM7bbjK4,5722
|
457
|
+
parsl-2024.12.2.data/scripts/process_worker_pool.py,sha256=82FoJTye2SysJzPg-N8BpenuHGU7hOI8-Bedq8HV9C0,41851
|
458
|
+
parsl-2024.12.2.dist-info/LICENSE,sha256=tAkwu8-AdEyGxGoSvJ2gVmQdcicWw3j1ZZueVV74M-E,11357
|
459
|
+
parsl-2024.12.2.dist-info/METADATA,sha256=illFNn9p_GjFGBuZHjGOSIFS6pxOzMyLdELN_-kQRno,3847
|
460
|
+
parsl-2024.12.2.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
|
461
|
+
parsl-2024.12.2.dist-info/entry_points.txt,sha256=XqnsWDYoEcLbsMcpnYGKLEnSBmaIe1YoM5YsBdJG2tI,176
|
462
|
+
parsl-2024.12.2.dist-info/top_level.txt,sha256=PIheYoUFQtF2icLsgOykgU-Cjuwr2Oi6On2jo5RYgRM,6
|
463
|
+
parsl-2024.12.2.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|