Coverage for python / lsst / ctrl / bps / parsl / sites / local.py: 69%
16 statements
« prev ^ index » next coverage.py v7.13.5, created at 2026-04-30 08:56 +0000
« prev ^ index » next coverage.py v7.13.5, created at 2026-04-30 08:56 +0000
1# This file is part of ctrl_bps_parsl.
2#
3# Developed for the LSST Data Management System.
4# This product includes software developed by the LSST Project
5# (https://www.lsst.org) and the LSST DESC (https://www.lsstdesc.org/).
6# See the COPYRIGHT file at the top-level directory of this distribution
7# for details of code ownership.
8#
9# This software is dual licensed under the GNU General Public License and also
10# under a 3-clause BSD license. Recipients may choose which of these licenses
11# to use; please see the files gpl-3.0.txt and/or bsd_license.txt,
12# respectively. If you choose the GPL option then the following text applies
13# (but note that there is still no warranty even if you opt for BSD instead):
14#
15# This program is free software: you can redistribute it and/or modify
16# it under the terms of the GNU General Public License as published by
17# the Free Software Foundation, either version 3 of the License, or
18# (at your option) any later version.
19#
20# This program is distributed in the hope that it will be useful,
21# but WITHOUT ANY WARRANTY; without even the implied warranty of
22# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
23# GNU General Public License for more details.
24#
25# You should have received a copy of the GNU General Public License
26# along with this program. If not, see <https://www.gnu.org/licenses/>.
28from typing import TYPE_CHECKING
30from parsl.executors import HighThroughputExecutor
31from parsl.executors.base import ParslExecutor
32from parsl.providers import LocalProvider
34from ..configuration import get_bps_config_value
35from ..site import SiteConfig
37if TYPE_CHECKING:
38 from ..job import ParslJob
40__all__ = ("Local",)
43class Local(SiteConfig):
44 """Configuration for running jobs on the local machine.
46 Parameters
47 ----------
48 *args : `~typing.Any`
49 Parameters forwarded to base class constructor.
50 **kwargs : `~typing.Any`
51 Keyword arguments passed to base class constructor, augmented by
52 the ``resource_list`` argument.
54 Notes
55 -----
56 The number of cores to use is specified in the site configuration, under
57 ``site.<computeSite>.cores`` (`int`).
58 """
60 def __init__(self, *args, **kwargs):
61 # Have BPS-defined resource requests for each job passed to executor.
62 kwargs["resource_list"] = ["priority"]
63 super().__init__(*args, **kwargs)
65 def get_executors(self) -> list[ParslExecutor]:
66 """Get a list of executors to be used in processing.
68 Each executor should have a unique ``label``.
69 """
70 cores = get_bps_config_value(self.site, "cores", int, required=True)
71 return [HighThroughputExecutor("local", provider=LocalProvider(), max_workers_per_node=cores)]
73 def select_executor(self, job: "ParslJob") -> str:
74 """Get the ``label`` of the executor to use to execute a job.
76 Parameters
77 ----------
78 job : `lsst.ctrl.bps.parsl.ParslJob`
79 Job to be executed.
81 Returns
82 -------
83 label : `str`
84 Label of executor to use to execute ``job``.
85 """
86 return "local"