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.
Files changed (28) hide show
  1. parsl/channels/base.py +0 -28
  2. parsl/channels/local/local.py +0 -36
  3. parsl/configs/ASPIRE1.py +0 -1
  4. parsl/executors/high_throughput/executor.py +15 -2
  5. parsl/executors/high_throughput/zmq_pipes.py +13 -4
  6. parsl/providers/condor/condor.py +3 -5
  7. parsl/providers/grid_engine/grid_engine.py +2 -3
  8. parsl/providers/local/local.py +1 -15
  9. parsl/providers/lsf/lsf.py +2 -12
  10. parsl/providers/pbspro/pbspro.py +1 -3
  11. parsl/providers/slurm/slurm.py +1 -11
  12. parsl/providers/torque/torque.py +1 -3
  13. parsl/tests/configs/htex_local_alternate.py +0 -1
  14. parsl/tests/configs/local_threads_monitoring.py +0 -1
  15. parsl/tests/manual_tests/test_udp_simple.py +0 -1
  16. parsl/tests/test_monitoring/test_htex_init_blocks_vs_monitoring.py +0 -1
  17. parsl/tests/test_monitoring/test_stdouterr.py +0 -1
  18. parsl/version.py +1 -1
  19. {parsl-2024.11.25.dist-info → parsl-2024.12.2.dist-info}/METADATA +2 -2
  20. {parsl-2024.11.25.dist-info → parsl-2024.12.2.dist-info}/RECORD +28 -28
  21. {parsl-2024.11.25.data → parsl-2024.12.2.data}/scripts/exec_parsl_function.py +0 -0
  22. {parsl-2024.11.25.data → parsl-2024.12.2.data}/scripts/interchange.py +0 -0
  23. {parsl-2024.11.25.data → parsl-2024.12.2.data}/scripts/parsl_coprocess.py +0 -0
  24. {parsl-2024.11.25.data → parsl-2024.12.2.data}/scripts/process_worker_pool.py +0 -0
  25. {parsl-2024.11.25.dist-info → parsl-2024.12.2.dist-info}/LICENSE +0 -0
  26. {parsl-2024.11.25.dist-info → parsl-2024.12.2.dist-info}/WHEEL +0 -0
  27. {parsl-2024.11.25.dist-info → parsl-2024.12.2.dist-info}/entry_points.txt +0 -0
  28. {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
@@ -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
@@ -34,7 +34,6 @@ config = Config(
34
34
  ],
35
35
  monitoring=MonitoringHub(
36
36
  hub_address=address_by_interface('ib0'),
37
- hub_port=55055,
38
37
  resource_monitoring_interval=10,
39
38
  ),
40
39
  strategy='simple',
@@ -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
- m = self.results_receiver.recv_multipart()
213
- logger.debug("Received ResultsIncoming message")
214
- return m
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()
@@ -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
- user_script_path = self.channel.push_file(userscript_path, self.channel.script_dir)
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(user_script_path)
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(channel_script_path)
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, channel_script_path)
146
+ cmd = "qsub -q {0} -terse {1}".format(self.queue, script_path)
148
147
  else:
149
- cmd = "qsub -terse {0}".format(channel_script_path)
148
+ cmd = "qsub -terse {0}".format(script_path)
150
149
  retcode, stdout, stderr = self.execute_wait(cmd)
151
150
 
152
151
  if retcode == 0:
@@ -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
 
@@ -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(channel_script_path)
231
+ cmd = "bsub < {0}".format(script_path)
242
232
  else:
243
- cmd = "bsub {0}".format(channel_script_path)
233
+ cmd = "bsub {0}".format(script_path)
244
234
  retcode, stdout, stderr = super().execute_wait(cmd)
245
235
 
246
236
  job_id = None
@@ -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, channel_script_path)
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
@@ -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
- if self.move_files:
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'):
@@ -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, channel_script_path)
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
@@ -62,7 +62,6 @@ def fresh_config():
62
62
  retries=2,
63
63
  monitoring=MonitoringHub(
64
64
  hub_address="localhost",
65
- hub_port=55055,
66
65
  monitoring_debug=False,
67
66
  resource_monitoring_interval=1,
68
67
  ),
@@ -5,7 +5,6 @@ from parsl.monitoring import MonitoringHub
5
5
  config = Config(executors=[ThreadPoolExecutor(label='threads', max_threads=4)],
6
6
  monitoring=MonitoringHub(
7
7
  hub_address="localhost",
8
- hub_port=55055,
9
8
  resource_monitoring_interval=3,
10
9
  )
11
10
  )
@@ -15,7 +15,6 @@ def local_setup():
15
15
  ],
16
16
  monitoring=MonitoringHub(
17
17
  hub_address="127.0.0.1",
18
- hub_port=55055,
19
18
  logging_level=logging.INFO,
20
19
  resource_monitoring_interval=10))
21
20
 
@@ -37,7 +37,6 @@ def fresh_config(run_dir, strategy, db_url):
37
37
  strategy_period=0.1,
38
38
  monitoring=MonitoringHub(
39
39
  hub_address="localhost",
40
- hub_port=55055,
41
40
  logging_endpoint=db_url
42
41
  )
43
42
  )
@@ -37,7 +37,6 @@ def fresh_config(run_dir):
37
37
  strategy_period=0.1,
38
38
  monitoring=MonitoringHub(
39
39
  hub_address="localhost",
40
- hub_port=55055,
41
40
  )
42
41
  )
43
42
 
parsl/version.py CHANGED
@@ -3,4 +3,4 @@
3
3
  Year.Month.Day[alpha/beta/..]
4
4
  Alphas will be numbered like this -> 2024.12.10a0
5
5
  """
6
- VERSION = '2024.11.25'
6
+ VERSION = '2024.12.02'
@@ -1,9 +1,9 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: parsl
3
- Version: 2024.11.25
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.11.25.tar.gz
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=4kJ3r0GSxsTtdp-nw_5pYzhehKY87nlvzt-KMWN2-Lw,131
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=k015EJ96C_nhzfH-pAs4EeEmIi0y_BqkYYl06PDrCeQ,2658
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=vtj3kuPvDfUxCjW6RcEmdy2PFDJ3Vz56k6V8-xt_0V4,3305
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=eKnmz0QD3V522emtXMjS6Ppeooe5lzcBgCE6cxunbYY,1718
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=huaG9bMUUbJLRG8F44O3bU7atS4ItQzrwFEq20D-jLM,37777
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=GKi1cp8a2lU-P7AJCgFVmZiHntaN16_I_kMyaezkl4g,8574
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=2e_64b5N6fjVCHdVXL6NhL6EoPohH-qZE80bhvpNty8,12981
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=7eOMsCu13pLFoAU8MbxACeVg3QliFl8fDojEjGuo0vM,8369
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=pTEcl9NnjRcL8FHcMeMEtJj1IXiAOxZ2Cih97Q5jDPY,11388
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=ZFYP0jIp-p8q7cXC67Vl77MlO93b-UYKlKaJhYDRDbQ,11306
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=luPUxBA0QMax7tKICsmesESQcOhcGnLi6GUlfGeO5pQ,8598
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=6tnDB2rLNdnY_FGtmNg6tPSdU9dP5DuWBg4GGEMTPYI,16442
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=RzaoOC5Gql3qxixBM9AzY2oVmtPBD06IGigcPls01-Y,9301
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=JJN4OASr-RXsXuLGVS3ciCrcczf8VVzbuTDWn9Wu0g4,2577
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=w-cxYFxVDJmCXMj2XMZnuWkrVTNaZfAXNwpr_uuOwFY,404
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=VyEbE3G5pcRjzbdUbQlL0BHiilfOsNsbbLOJghU7n84,1037
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=BAnl80waEaE41pvtpYD-AbNgdfF7QBgVwcCN9IsFPTM,2746
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=9FQSfiaMrOpoSwravZuEwmdgUgI7iG0TPRucsYC_NJA,4498
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.11.25.data/scripts/exec_parsl_function.py,sha256=YXKVVIa4zXmOtz-0Ca4E_5nQfN_3S2bh2tB75uZZB4w,7774
455
- parsl-2024.11.25.data/scripts/interchange.py,sha256=uRG_3K-XcSHzCNzI1_ab9k9UUiuy6llITgG1BF1N_Mw,30085
456
- parsl-2024.11.25.data/scripts/parsl_coprocess.py,sha256=zrVjEqQvFOHxsLufPi00xzMONagjVwLZbavPM7bbjK4,5722
457
- parsl-2024.11.25.data/scripts/process_worker_pool.py,sha256=82FoJTye2SysJzPg-N8BpenuHGU7hOI8-Bedq8HV9C0,41851
458
- parsl-2024.11.25.dist-info/LICENSE,sha256=tAkwu8-AdEyGxGoSvJ2gVmQdcicWw3j1ZZueVV74M-E,11357
459
- parsl-2024.11.25.dist-info/METADATA,sha256=yA5YMJUttDX3G8uZgVVXMWTjFE4MWqL_dDQL7fpW1bA,3848
460
- parsl-2024.11.25.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
461
- parsl-2024.11.25.dist-info/entry_points.txt,sha256=XqnsWDYoEcLbsMcpnYGKLEnSBmaIe1YoM5YsBdJG2tI,176
462
- parsl-2024.11.25.dist-info/top_level.txt,sha256=PIheYoUFQtF2icLsgOykgU-Cjuwr2Oi6On2jo5RYgRM,6
463
- parsl-2024.11.25.dist-info/RECORD,,
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,,