parsl 2024.4.29__py3-none-any.whl → 2024.5.13__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/dataflow/dflow.py +8 -9
- parsl/executors/high_throughput/interchange.py +4 -0
- parsl/executors/high_throughput/manager_record.py +2 -0
- parsl/executors/status_handling.py +0 -3
- parsl/executors/taskvine/executor.py +0 -31
- parsl/executors/workqueue/executor.py +0 -30
- parsl/jobs/job_status_poller.py +1 -3
- parsl/monitoring/monitoring.py +3 -0
- parsl/monitoring/radios.py +1 -1
- parsl/providers/pbspro/pbspro.py +1 -3
- parsl/tests/test_htex/test_managers_command.py +40 -0
- parsl/version.py +1 -1
- {parsl-2024.4.29.dist-info → parsl-2024.5.13.dist-info}/METADATA +2 -2
- {parsl-2024.4.29.dist-info → parsl-2024.5.13.dist-info}/RECORD +21 -20
- {parsl-2024.4.29.data → parsl-2024.5.13.data}/scripts/exec_parsl_function.py +0 -0
- {parsl-2024.4.29.data → parsl-2024.5.13.data}/scripts/parsl_coprocess.py +0 -0
- {parsl-2024.4.29.data → parsl-2024.5.13.data}/scripts/process_worker_pool.py +0 -0
- {parsl-2024.4.29.dist-info → parsl-2024.5.13.dist-info}/LICENSE +0 -0
- {parsl-2024.4.29.dist-info → parsl-2024.5.13.dist-info}/WHEEL +0 -0
- {parsl-2024.4.29.dist-info → parsl-2024.5.13.dist-info}/entry_points.txt +0 -0
- {parsl-2024.4.29.dist-info → parsl-2024.5.13.dist-info}/top_level.txt +0 -0
parsl/dataflow/dflow.py
CHANGED
@@ -177,11 +177,9 @@ class DataFlowKernel:
|
|
177
177
|
|
178
178
|
# this must be set before executors are added since add_executors calls
|
179
179
|
# job_status_poller.add_executors.
|
180
|
-
radio = self.monitoring.radio if self.monitoring else None
|
181
180
|
self.job_status_poller = JobStatusPoller(strategy=self.config.strategy,
|
182
181
|
strategy_period=self.config.strategy_period,
|
183
|
-
max_idletime=self.config.max_idletime
|
184
|
-
monitoring=radio)
|
182
|
+
max_idletime=self.config.max_idletime)
|
185
183
|
|
186
184
|
self.executors: Dict[str, ParslExecutor] = {}
|
187
185
|
|
@@ -1179,12 +1177,9 @@ class DataFlowKernel:
|
|
1179
1177
|
self.job_status_poller.add_executors(block_executors)
|
1180
1178
|
|
1181
1179
|
def atexit_cleanup(self) -> None:
|
1182
|
-
|
1183
|
-
|
1184
|
-
|
1185
|
-
"exiting to release any resources")
|
1186
|
-
else:
|
1187
|
-
logger.info("python process is exiting, but DFK has already been cleaned up")
|
1180
|
+
logger.warning("Python is exiting with a DFK still running. "
|
1181
|
+
"You should call parsl.dfk().cleanup() before "
|
1182
|
+
"exiting to release any resources")
|
1188
1183
|
|
1189
1184
|
def wait_for_current_tasks(self) -> None:
|
1190
1185
|
"""Waits for all tasks in the task list to be completed, by waiting for their
|
@@ -1272,6 +1267,10 @@ class DataFlowKernel:
|
|
1272
1267
|
self.monitoring.close()
|
1273
1268
|
logger.info("Terminated monitoring")
|
1274
1269
|
|
1270
|
+
logger.info("Unregistering atexit hook")
|
1271
|
+
atexit.unregister(self.atexit_cleanup)
|
1272
|
+
logger.info("Unregistered atexit hook")
|
1273
|
+
|
1275
1274
|
logger.info("DFK cleanup complete")
|
1276
1275
|
|
1277
1276
|
def checkpoint(self, tasks: Optional[Sequence[TaskRecord]] = None) -> str:
|
@@ -310,6 +310,8 @@ class Interchange:
|
|
310
310
|
'tasks': len(m['tasks']),
|
311
311
|
'idle_duration': idle_duration,
|
312
312
|
'active': m['active'],
|
313
|
+
'parsl_version': m['parsl_version'],
|
314
|
+
'python_version': m['python_version'],
|
313
315
|
'draining': m['draining']}
|
314
316
|
reply.append(resp)
|
315
317
|
|
@@ -435,6 +437,8 @@ class Interchange:
|
|
435
437
|
'worker_count': 0,
|
436
438
|
'active': True,
|
437
439
|
'draining': False,
|
440
|
+
'parsl_version': msg['parsl_v'],
|
441
|
+
'python_version': msg['python_v'],
|
438
442
|
'tasks': []}
|
439
443
|
self.connected_block_history.append(msg['block_id'])
|
440
444
|
|
@@ -43,9 +43,6 @@ class BlockProviderExecutor(ParslExecutor):
|
|
43
43
|
invoking scale_out, but it will not initialize the blocks requested by
|
44
44
|
any init_blocks parameter. Subclasses must implement that behaviour
|
45
45
|
themselves.
|
46
|
-
|
47
|
-
BENC: TODO: block error handling: maybe I want this more user pluggable?
|
48
|
-
I'm not sure of use cases for switchability at the moment beyond "yes or no"
|
49
46
|
"""
|
50
47
|
def __init__(self, *,
|
51
48
|
provider: Optional[ExecutionProvider],
|
@@ -4,7 +4,6 @@ high-throughput system for delegating Parsl tasks to thousands of remote machine
|
|
4
4
|
"""
|
5
5
|
|
6
6
|
# Import Python built-in libraries
|
7
|
-
import atexit
|
8
7
|
import threading
|
9
8
|
import multiprocessing
|
10
9
|
import logging
|
@@ -180,24 +179,6 @@ class TaskVineExecutor(BlockProviderExecutor, putils.RepresentationMixin):
|
|
180
179
|
else:
|
181
180
|
self._poncho_available = True
|
182
181
|
|
183
|
-
# Register atexit handler to cleanup when Python shuts down
|
184
|
-
atexit.register(self.atexit_cleanup)
|
185
|
-
|
186
|
-
# Attribute indicating whether this executor was started to shut it down properly.
|
187
|
-
# This safeguards cases where an object of this executor is created but
|
188
|
-
# the executor never starts, so it shouldn't be shutdowned.
|
189
|
-
self._is_started = False
|
190
|
-
|
191
|
-
# Attribute indicating whether this executor was shutdown before.
|
192
|
-
# This safeguards cases where this object is automatically shut down (e.g.,
|
193
|
-
# via atexit) and the user also explicitly calls shut down. While this is
|
194
|
-
# permitted, the effect of an executor shutdown should happen only once.
|
195
|
-
self._is_shutdown = False
|
196
|
-
|
197
|
-
def atexit_cleanup(self):
|
198
|
-
# Calls this executor's shutdown method upon Python exiting the process.
|
199
|
-
self.shutdown()
|
200
|
-
|
201
182
|
def _get_launch_command(self, block_id):
|
202
183
|
# Implements BlockProviderExecutor's abstract method.
|
203
184
|
# This executor uses different terminology for worker/launch
|
@@ -257,9 +238,6 @@ class TaskVineExecutor(BlockProviderExecutor, putils.RepresentationMixin):
|
|
257
238
|
retrieve Parsl tasks within the TaskVine system.
|
258
239
|
"""
|
259
240
|
|
260
|
-
# Mark this executor object as started
|
261
|
-
self._is_started = True
|
262
|
-
|
263
241
|
# Synchronize connection and communication settings between the manager and factory
|
264
242
|
self.__synchronize_manager_factory_comm_settings()
|
265
243
|
|
@@ -618,14 +596,6 @@ class TaskVineExecutor(BlockProviderExecutor, putils.RepresentationMixin):
|
|
618
596
|
"""Shutdown the executor. Sets flag to cancel the submit process and
|
619
597
|
collector thread, which shuts down the TaskVine system submission.
|
620
598
|
"""
|
621
|
-
if not self._is_started:
|
622
|
-
# Don't shutdown if the executor never starts.
|
623
|
-
return
|
624
|
-
|
625
|
-
if self._is_shutdown:
|
626
|
-
# Don't shutdown this executor again.
|
627
|
-
return
|
628
|
-
|
629
599
|
logger.debug("TaskVine shutdown started")
|
630
600
|
self._should_stop.set()
|
631
601
|
|
@@ -650,7 +620,6 @@ class TaskVineExecutor(BlockProviderExecutor, putils.RepresentationMixin):
|
|
650
620
|
self._finished_task_queue.close()
|
651
621
|
self._finished_task_queue.join_thread()
|
652
622
|
|
653
|
-
self._is_shutdown = True
|
654
623
|
logger.debug("TaskVine shutdown completed")
|
655
624
|
|
656
625
|
@wrap_with_logs
|
@@ -3,7 +3,6 @@ Cooperative Computing Lab (CCL) at Notre Dame to provide a fault-tolerant,
|
|
3
3
|
high-throughput system for delegating Parsl tasks to thousands of remote machines
|
4
4
|
"""
|
5
5
|
|
6
|
-
import atexit
|
7
6
|
import threading
|
8
7
|
import multiprocessing
|
9
8
|
import logging
|
@@ -298,24 +297,6 @@ class WorkQueueExecutor(BlockProviderExecutor, putils.RepresentationMixin):
|
|
298
297
|
if self.init_command != "":
|
299
298
|
self.launch_cmd = self.init_command + "; " + self.launch_cmd
|
300
299
|
|
301
|
-
# register atexit handler to cleanup when Python shuts down
|
302
|
-
atexit.register(self.atexit_cleanup)
|
303
|
-
|
304
|
-
# Attribute indicating whether this executor was started to shut it down properly.
|
305
|
-
# This safeguards cases where an object of this executor is created but
|
306
|
-
# the executor never starts, so it shouldn't be shutdowned.
|
307
|
-
self.is_started = False
|
308
|
-
|
309
|
-
# Attribute indicating whether this executor was shutdown before.
|
310
|
-
# This safeguards cases where this object is automatically shut down (e.g.,
|
311
|
-
# via atexit) and the user also explicitly calls shut down. While this is
|
312
|
-
# permitted, the effect of an executor shutdown should happen only once.
|
313
|
-
self.is_shutdown = False
|
314
|
-
|
315
|
-
def atexit_cleanup(self):
|
316
|
-
# Calls this executor's shutdown method upon Python exiting the process.
|
317
|
-
self.shutdown()
|
318
|
-
|
319
300
|
def _get_launch_command(self, block_id):
|
320
301
|
# this executor uses different terminology for worker/launch
|
321
302
|
# commands than in htex
|
@@ -325,8 +306,6 @@ class WorkQueueExecutor(BlockProviderExecutor, putils.RepresentationMixin):
|
|
325
306
|
"""Create submit process and collector thread to create, send, and
|
326
307
|
retrieve Parsl tasks within the Work Queue system.
|
327
308
|
"""
|
328
|
-
# Mark this executor object as started
|
329
|
-
self.is_started = True
|
330
309
|
self.tasks_lock = threading.Lock()
|
331
310
|
|
332
311
|
# Create directories for data and results
|
@@ -713,14 +692,6 @@ class WorkQueueExecutor(BlockProviderExecutor, putils.RepresentationMixin):
|
|
713
692
|
"""Shutdown the executor. Sets flag to cancel the submit process and
|
714
693
|
collector thread, which shuts down the Work Queue system submission.
|
715
694
|
"""
|
716
|
-
if not self.is_started:
|
717
|
-
# Don't shutdown if the executor never starts.
|
718
|
-
return
|
719
|
-
|
720
|
-
if self.is_shutdown:
|
721
|
-
# Don't shutdown this executor again.
|
722
|
-
return
|
723
|
-
|
724
695
|
logger.debug("Work Queue shutdown started")
|
725
696
|
self.should_stop.value = True
|
726
697
|
|
@@ -741,7 +712,6 @@ class WorkQueueExecutor(BlockProviderExecutor, putils.RepresentationMixin):
|
|
741
712
|
self.collector_queue.close()
|
742
713
|
self.collector_queue.join_thread()
|
743
714
|
|
744
|
-
self.is_shutdown = True
|
745
715
|
logger.debug("Work Queue shutdown completed")
|
746
716
|
|
747
717
|
@wrap_with_logs
|
parsl/jobs/job_status_poller.py
CHANGED
@@ -1,5 +1,4 @@
|
|
1
1
|
import logging
|
2
|
-
import parsl
|
3
2
|
from typing import List, Sequence, Optional, Union
|
4
3
|
|
5
4
|
from parsl.jobs.strategy import Strategy
|
@@ -14,8 +13,7 @@ logger = logging.getLogger(__name__)
|
|
14
13
|
|
15
14
|
class JobStatusPoller(Timer):
|
16
15
|
def __init__(self, *, strategy: Optional[str], max_idletime: float,
|
17
|
-
strategy_period: Union[float, int]
|
18
|
-
monitoring: Optional["parsl.monitoring.radios.MonitoringRadio"] = None) -> None:
|
16
|
+
strategy_period: Union[float, int]) -> None:
|
19
17
|
self._executors = [] # type: List[BlockProviderExecutor]
|
20
18
|
self._strategy = Strategy(strategy=strategy,
|
21
19
|
max_idletime=max_idletime)
|
parsl/monitoring/monitoring.py
CHANGED
@@ -244,6 +244,7 @@ class MonitoringHub(RepresentationMixin):
|
|
244
244
|
self.router_exit_event.set()
|
245
245
|
logger.info("Waiting for router to terminate")
|
246
246
|
self.router_proc.join()
|
247
|
+
self.router_proc.close()
|
247
248
|
logger.debug("Finished waiting for router termination")
|
248
249
|
if len(exception_msgs) == 0:
|
249
250
|
logger.debug("Sending STOP to DBM")
|
@@ -252,6 +253,7 @@ class MonitoringHub(RepresentationMixin):
|
|
252
253
|
logger.debug("Not sending STOP to DBM, because there were DBM exceptions")
|
253
254
|
logger.debug("Waiting for DB termination")
|
254
255
|
self.dbm_proc.join()
|
256
|
+
self.dbm_proc.close()
|
255
257
|
logger.debug("Finished waiting for DBM termination")
|
256
258
|
|
257
259
|
# should this be message based? it probably doesn't need to be if
|
@@ -259,6 +261,7 @@ class MonitoringHub(RepresentationMixin):
|
|
259
261
|
logger.info("Terminating filesystem radio receiver process")
|
260
262
|
self.filesystem_proc.terminate()
|
261
263
|
self.filesystem_proc.join()
|
264
|
+
self.filesystem_proc.close()
|
262
265
|
|
263
266
|
logger.info("Closing monitoring multiprocessing queues")
|
264
267
|
self.exception_q.close()
|
parsl/monitoring/radios.py
CHANGED
@@ -177,7 +177,7 @@ class UDPRadio(MonitoringRadio):
|
|
177
177
|
|
178
178
|
|
179
179
|
class MultiprocessingQueueRadio(MonitoringRadio):
|
180
|
-
"""A monitoring radio
|
180
|
+
"""A monitoring radio which connects over a multiprocessing Queue.
|
181
181
|
This radio is intended to be used on the submit side, where components
|
182
182
|
in the submit process, or processes launched by multiprocessing, will have
|
183
183
|
access to a Queue shared with the monitoring database code (bypassing the
|
parsl/providers/pbspro/pbspro.py
CHANGED
@@ -7,9 +7,7 @@ from parsl.channels import LocalChannel
|
|
7
7
|
from parsl.jobs.states import JobState, JobStatus
|
8
8
|
from parsl.launchers import SingleNodeLauncher
|
9
9
|
from parsl.providers.pbspro.template import template_string
|
10
|
-
from parsl.providers import TorqueProvider
|
11
|
-
|
12
|
-
from parsl.providers.torque.torque import translate_table
|
10
|
+
from parsl.providers.torque.torque import TorqueProvider, translate_table
|
13
11
|
|
14
12
|
logger = logging.getLogger(__name__)
|
15
13
|
|
@@ -0,0 +1,40 @@
|
|
1
|
+
import pytest
|
2
|
+
import logging
|
3
|
+
|
4
|
+
import sys
|
5
|
+
import parsl
|
6
|
+
from parsl.app.app import python_app
|
7
|
+
from parsl.tests.configs.htex_local import fresh_config
|
8
|
+
|
9
|
+
|
10
|
+
def local_setup():
|
11
|
+
config = fresh_config()
|
12
|
+
config.executors[0].poll_period = 1
|
13
|
+
config.executors[0].max_workers_per_node = 1
|
14
|
+
parsl.load(config)
|
15
|
+
|
16
|
+
|
17
|
+
def local_teardown():
|
18
|
+
parsl.dfk().cleanup()
|
19
|
+
parsl.clear()
|
20
|
+
|
21
|
+
|
22
|
+
@python_app
|
23
|
+
def dummy():
|
24
|
+
pass
|
25
|
+
|
26
|
+
|
27
|
+
@pytest.mark.local
|
28
|
+
def test_connected_managers():
|
29
|
+
|
30
|
+
# Run dummy function to ensure a manager is online
|
31
|
+
x = dummy()
|
32
|
+
assert x.result() is None
|
33
|
+
executor = parsl.dfk().executors['htex_local']
|
34
|
+
manager_info_list = executor.connected_managers()
|
35
|
+
assert len(manager_info_list) == 1
|
36
|
+
manager_info = manager_info_list[0]
|
37
|
+
assert 'python_version' in manager_info
|
38
|
+
assert 'parsl_version' in manager_info
|
39
|
+
assert manager_info['parsl_version'] == parsl.__version__
|
40
|
+
assert manager_info['python_version'] == f"{sys.version_info.major}.{sys.version_info.minor}.{sys.version_info.micro}"
|
parsl/version.py
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: parsl
|
3
|
-
Version: 2024.
|
3
|
+
Version: 2024.5.13
|
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.05.13.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=hakfdg-sgxEjwloZeDrt6EhzwdzecvjJhkPHHxh8lII,1938
|
|
8
8
|
parsl/process_loggers.py,sha256=1G3Rfrh5wuZNo2X03grG4kTYPGOxz7hHCyG6L_A3b0A,1137
|
9
9
|
parsl/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
10
10
|
parsl/utils.py,sha256=DUPrl9ZdzwJzz2rmlRws77OMs43iQo_CT-Kr3uJs-fo,11202
|
11
|
-
parsl/version.py,sha256=
|
11
|
+
parsl/version.py,sha256=GPg3uad5Hzzr8oht4bIZGZh6q3lGRIOc-tORHF3ATgs,131
|
12
12
|
parsl/app/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
13
13
|
parsl/app/app.py,sha256=wAHchJetgnicT1pn0NJKDeDX0lV3vDFlG8cQd_Ciax4,8522
|
14
14
|
parsl/app/bash.py,sha256=VufxGROrlJB3dP03syNutU0x8rLzfI-gooWwBZ4FFQ8,5676
|
@@ -61,7 +61,7 @@ parsl/data_provider/rsync.py,sha256=2-ZxqrT-hBj39x082NusJaBqsGW4Jd2qCW6JkVPpEl0,
|
|
61
61
|
parsl/data_provider/staging.py,sha256=l-mAXFburs3BWPjkSmiQKuAgJpsxCG62yATPDbrafYI,4523
|
62
62
|
parsl/data_provider/zip.py,sha256=50xvXms3UoEFc4v_w6joLAcCrcdKuOjIPoPLgUz1Jio,4498
|
63
63
|
parsl/dataflow/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
64
|
-
parsl/dataflow/dflow.py,sha256=
|
64
|
+
parsl/dataflow/dflow.py,sha256=lyZLOzlAOWYt8OvINM9Vv4Id3KpqM_zkNz6R9ZynjiA,65896
|
65
65
|
parsl/dataflow/errors.py,sha256=w2vOt_ymzG2dOqJUO4IDcmTlrCIHlMZL8nBVyVq0O_8,2176
|
66
66
|
parsl/dataflow/futures.py,sha256=XGgaoaT3N2U3vvZ7DEoLkGBrZscq_VzffZ9goLB87ko,6081
|
67
67
|
parsl/dataflow/memoization.py,sha256=AsJO6c6cRp2ac6H8uGn2USlEi78_nX3QWvpxYt4XdYE,9583
|
@@ -71,7 +71,7 @@ parsl/dataflow/taskrecord.py,sha256=bzIBmlDTsRrELtB9PUQwxTWcwrCd8aMsUAzvijle1eo,
|
|
71
71
|
parsl/executors/__init__.py,sha256=J50N97Nm9YRjz6K0oNXDxUYIsDjL43_tp3LVb2w7n-M,381
|
72
72
|
parsl/executors/base.py,sha256=Kvui8yDPzz7yQpm9qSkMdhQS4eu0tQTkVZ99j6HGgA4,5087
|
73
73
|
parsl/executors/errors.py,sha256=xVswxgi7vmJcUMCeYDAPK8sQT2kHFFROVoOr0dnmcWE,2098
|
74
|
-
parsl/executors/status_handling.py,sha256=
|
74
|
+
parsl/executors/status_handling.py,sha256=QNFfa2aGkbVYvdkF7KvB00uM7psNf0lRExFmHmvqbYk,13472
|
75
75
|
parsl/executors/threads.py,sha256=bMU3JFghm17Lpcua13pr3NgQhkUDDc2mqvF2yJBrVNQ,3353
|
76
76
|
parsl/executors/flux/__init__.py,sha256=P9grTTeRPXfqXurFhlSS7XhmE6tTbnCnyQ1f9b-oYHE,136
|
77
77
|
parsl/executors/flux/execute_parsl_task.py,sha256=yUG_WjZLcX8LrgPl26mpEBWZhQMlVNbRLGu08yIjdf4,1553
|
@@ -80,8 +80,8 @@ parsl/executors/flux/flux_instance_manager.py,sha256=tTEOATClm9SwdgLeBRWPC6D55iN
|
|
80
80
|
parsl/executors/high_throughput/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
81
81
|
parsl/executors/high_throughput/errors.py,sha256=vl69wLuVOplbKxHI9WphEGBExHWkTn5n8T9QhBXuNH0,380
|
82
82
|
parsl/executors/high_throughput/executor.py,sha256=Er0QUG-HNatDPVBsLYZbbEStyNJsu4oE9UQ7LtQYH7w,37318
|
83
|
-
parsl/executors/high_throughput/interchange.py,sha256=
|
84
|
-
parsl/executors/high_throughput/manager_record.py,sha256=
|
83
|
+
parsl/executors/high_throughput/interchange.py,sha256=ovs_boredW4X0R7oNCGnf8scgtA0ow6fmdCKliWOyBk,31803
|
84
|
+
parsl/executors/high_throughput/manager_record.py,sha256=W1K_rxU1c76qX-uxw62uGzgsDuxnZwdpYTTH5VwKRFg,432
|
85
85
|
parsl/executors/high_throughput/monitoring_info.py,sha256=3gQpwQjjNDEBz0cQqJZB6hRiwLiWwXs83zkQDmbOwxY,297
|
86
86
|
parsl/executors/high_throughput/mpi_prefix_composer.py,sha256=GPSejuNL407gvzw9f7dTWArTLn6heTi-erJjgcM-_8Y,4273
|
87
87
|
parsl/executors/high_throughput/mpi_resource_management.py,sha256=geLYmp2teKYgTnzATAR_JPtjAa0ysu6pHpXs90vwkds,7975
|
@@ -96,7 +96,7 @@ parsl/executors/radical/rpex_worker.py,sha256=1M1df-hzFdmZMWbRZlUzIX7uAWMKJ_SkxL
|
|
96
96
|
parsl/executors/taskvine/__init__.py,sha256=sWIJdvSLgQKul9dlSjIkNat7yBDgU3SrBF3X2yhT86E,293
|
97
97
|
parsl/executors/taskvine/errors.py,sha256=MNS_NjpvHjwevQXOjqjSEBFroqEWi-LT1ZEVZ2C5Dx0,652
|
98
98
|
parsl/executors/taskvine/exec_parsl_function.py,sha256=oUAKbPWwpbzWwQ47bZQlVDxS8txhnhPsonMf3AOEMGQ,7085
|
99
|
-
parsl/executors/taskvine/executor.py,sha256=
|
99
|
+
parsl/executors/taskvine/executor.py,sha256=L1TszrOcKuKl9ewjD1M85MG268fxlVz1D08mlQgPNwc,31806
|
100
100
|
parsl/executors/taskvine/factory.py,sha256=sHhfGv7xRFrWkQclzRXuFEAHuSXhsZu2lR5LJ81aucA,2638
|
101
101
|
parsl/executors/taskvine/factory_config.py,sha256=AbE2fN2snrF5ITYrrS4DnGn2XkJHUFr_17DYHDHIwq0,3693
|
102
102
|
parsl/executors/taskvine/manager.py,sha256=VxVN2L5zFVPNfSAJrGgq87MRJKpcxf-BHdO5QWxB4TU,25822
|
@@ -105,13 +105,13 @@ parsl/executors/taskvine/utils.py,sha256=iSrIogeiauL3UNy_9tiZp1cBSNn6fIJkMYQRVi1
|
|
105
105
|
parsl/executors/workqueue/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
106
106
|
parsl/executors/workqueue/errors.py,sha256=ghB93Ptb_QbOAvgLe7siV_snRRkU_T-cFHv3AR6Ziwo,541
|
107
107
|
parsl/executors/workqueue/exec_parsl_function.py,sha256=NtWNeBvRqksej38eRPw8zPBJ1CeW6vgaitve0tfz_qc,7801
|
108
|
-
parsl/executors/workqueue/executor.py,sha256=
|
108
|
+
parsl/executors/workqueue/executor.py,sha256=uN1y-Zo_Slhg005Z9Z8RXKEf3rSwuv-za6S1xdATQ-U,49312
|
109
109
|
parsl/executors/workqueue/parsl_coprocess.py,sha256=kEFGC-A97c_gweUPvrc9EEGume7vUpkJLJlyAb87xtQ,5737
|
110
110
|
parsl/executors/workqueue/parsl_coprocess_stub.py,sha256=_bJmpPIgL42qM6bVzeEKt1Mn1trSP41rtJguXxPGfHI,735
|
111
111
|
parsl/jobs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
112
112
|
parsl/jobs/error_handlers.py,sha256=WcWZUA7KyE1ocX5zrMf_EwqOob8Jb7uHMjD3nlb_BUo,2319
|
113
113
|
parsl/jobs/errors.py,sha256=cpSQXCrlKtuHsQf7usjF-lX8XsDkFnE5kWpmFjiN6OU,178
|
114
|
-
parsl/jobs/job_status_poller.py,sha256=
|
114
|
+
parsl/jobs/job_status_poller.py,sha256=0bnl3fUG-Cs5nEImxQ_iiTslNUkZ_9788t9UxvQO4wg,2195
|
115
115
|
parsl/jobs/states.py,sha256=rPBoAEEudKngWFijlwvXXhAagDs_9DCXvQP9rwzVgCM,4855
|
116
116
|
parsl/jobs/strategy.py,sha256=U5wDSqerRf94l16g2sDkf1jj1hsMmMYOZ6p0l0bqEO0,13799
|
117
117
|
parsl/launchers/__init__.py,sha256=k8zAB3IBP-brfqXUptKwGkvsIRaXjAJZNBJa2XVtY1A,546
|
@@ -121,8 +121,8 @@ parsl/launchers/launchers.py,sha256=VB--fiVv_IQne3DydTMSdGUY0o0g69puAs-Hd3mJ2vo,
|
|
121
121
|
parsl/monitoring/__init__.py,sha256=0ywNz6i0lM1xo_7_BIxhETDGeVd2C_0wwD7qgeaMR4c,83
|
122
122
|
parsl/monitoring/db_manager.py,sha256=hdmmXSTXp8Wwhr7vLpQalD_ahRl3SNxKYVsplnThRk8,37021
|
123
123
|
parsl/monitoring/message_type.py,sha256=Khn88afNxcOIciKiCK4GLnn90I5BlRTiOL3zK-P07yQ,401
|
124
|
-
parsl/monitoring/monitoring.py,sha256=
|
125
|
-
parsl/monitoring/radios.py,sha256=
|
124
|
+
parsl/monitoring/monitoring.py,sha256=unr0rYjgkmdqApAyXfu0aeBAcUGGjVz8YBfRZ2LyXgo,13574
|
125
|
+
parsl/monitoring/radios.py,sha256=fQ1zpxSLPmDcf9WOXZk3eTeFUWWS2rmSesena7jjmko,5849
|
126
126
|
parsl/monitoring/remote.py,sha256=0wqANMcuvq3dpja3agdbOzD72n5oUYp7PcNKyLCC35E,13923
|
127
127
|
parsl/monitoring/router.py,sha256=92krSS8xIWDQuxJMxQ3D_gbLcqgKymxr3HVJwAImdrw,9557
|
128
128
|
parsl/monitoring/types.py,sha256=SO6Fjjbb83sv_MtbutoxGssiWh6oXKkEEsD4EvwOnZ4,629
|
@@ -181,7 +181,7 @@ parsl/providers/lsf/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSu
|
|
181
181
|
parsl/providers/lsf/lsf.py,sha256=AECVpjl_CTreE-APFQSjMVVIb3HheG6zculJn-zYtdM,11502
|
182
182
|
parsl/providers/lsf/template.py,sha256=leQ_TpXv7ePMzbHfLaWvqMR0VORxlp-hjX5JxtkcwwU,269
|
183
183
|
parsl/providers/pbspro/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
184
|
-
parsl/providers/pbspro/pbspro.py,sha256=
|
184
|
+
parsl/providers/pbspro/pbspro.py,sha256=lTRCUXGBpZHbEDLTvJRS6MKDkmQII9wXYAEif6rNirc,8794
|
185
185
|
parsl/providers/pbspro/template.py,sha256=y-Dher--t5Eury-c7cAuSZs9FEUXWiruFUI07v81558,315
|
186
186
|
parsl/providers/slurm/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
187
187
|
parsl/providers/slurm/slurm.py,sha256=HnDZk2owmNz_r6Spwlu233HbQLo9dWePy3KD4CXXRRs,13916
|
@@ -341,6 +341,7 @@ parsl/tests/test_htex/test_disconnected_blocks.py,sha256=iga7wmhGACwUN6gkEFPw1dL
|
|
341
341
|
parsl/tests/test_htex/test_drain.py,sha256=BvPQIo0xx-z191eVR2rG51x22yzqD-6dLSH7bCAUhOg,2288
|
342
342
|
parsl/tests/test_htex/test_htex.py,sha256=4dXtcthZQvgEDtMc00g6Pw7FnqNWB_0j8fuJqHKO-IE,3896
|
343
343
|
parsl/tests/test_htex/test_manager_failure.py,sha256=gemQopZoDEoZLOvep5JZkY6tQlZoko8Z0Kmpj1-Gbws,1161
|
344
|
+
parsl/tests/test_htex/test_managers_command.py,sha256=aOXRaOXna9cnFmFinujv7ohSYDbX6esk1JtHfsUkAlk,1022
|
344
345
|
parsl/tests/test_htex/test_missing_worker.py,sha256=R8FaUNnpmXY9E_ZCC797La4jWsJvp136xBhLY9yIgyU,818
|
345
346
|
parsl/tests/test_htex/test_multiple_disconnected_blocks.py,sha256=L4vw_Mo-upp2p9-TyPDfluNJJQ2BxHHNXgS3xhhuE28,1993
|
346
347
|
parsl/tests/test_htex/test_worker_failure.py,sha256=Uz-RHI-LK78FMjXUvrUFmo4iYfmpDVBUcBxxRb3UG9M,603
|
@@ -454,12 +455,12 @@ parsl/tests/unit/test_file.py,sha256=vLycnYcv3bvSzL-FV8WdoibqTyb41BrH1LUYBavobsg
|
|
454
455
|
parsl/usage_tracking/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
455
456
|
parsl/usage_tracking/api.py,sha256=V_IMgpxUloP--MtlZGY5Uf6SfHVQSPP8poa3PedOs_I,1822
|
456
457
|
parsl/usage_tracking/usage.py,sha256=IGNPVEo3YJ3SI48WGESrip7PiCqEAheQ0Kgu8dRgQag,7616
|
457
|
-
parsl-2024.
|
458
|
-
parsl-2024.
|
459
|
-
parsl-2024.
|
460
|
-
parsl-2024.
|
461
|
-
parsl-2024.
|
462
|
-
parsl-2024.
|
463
|
-
parsl-2024.
|
464
|
-
parsl-2024.
|
465
|
-
parsl-2024.
|
458
|
+
parsl-2024.5.13.data/scripts/exec_parsl_function.py,sha256=NtWNeBvRqksej38eRPw8zPBJ1CeW6vgaitve0tfz_qc,7801
|
459
|
+
parsl-2024.5.13.data/scripts/parsl_coprocess.py,sha256=Y7Tc-h9WGui-YDe3w_h91w2Sm1JNL1gJ9kAV4PE_gw8,5722
|
460
|
+
parsl-2024.5.13.data/scripts/process_worker_pool.py,sha256=31tyTtU7hrrsatGReuCbLM-3GWkaYK1bvlFE1MhKYQg,41253
|
461
|
+
parsl-2024.5.13.dist-info/LICENSE,sha256=tAkwu8-AdEyGxGoSvJ2gVmQdcicWw3j1ZZueVV74M-E,11357
|
462
|
+
parsl-2024.5.13.dist-info/METADATA,sha256=NGWrcVMikzUIXBsaxN1mKa8ItjN_LdgNE3bfu_eKN8g,4012
|
463
|
+
parsl-2024.5.13.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
|
464
|
+
parsl-2024.5.13.dist-info/entry_points.txt,sha256=XqnsWDYoEcLbsMcpnYGKLEnSBmaIe1YoM5YsBdJG2tI,176
|
465
|
+
parsl-2024.5.13.dist-info/top_level.txt,sha256=PIheYoUFQtF2icLsgOykgU-Cjuwr2Oi6On2jo5RYgRM,6
|
466
|
+
parsl-2024.5.13.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|