Coverage for python / lsst / ctrl / bps / parsl / sites / local.py: 69%
16 statements
« prev ^ index » next coverage.py v7.13.1, created at 2026-01-29 01:46 -0800
« prev ^ index » next coverage.py v7.13.1, created at 2026-01-29 01:46 -0800
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 The number of cores to use is specified in the site configuration, under
47 ``site.<computeSite>.cores`` (`int`).
48 """
50 def __init__(self, *args, **kwargs):
51 # Have BPS-defined resource requests for each job passed to executor.
52 kwargs["resource_list"] = ["priority"]
53 super().__init__(*args, **kwargs)
55 def get_executors(self) -> list[ParslExecutor]:
56 """Get a list of executors to be used in processing.
58 Each executor should have a unique ``label``.
59 """
60 cores = get_bps_config_value(self.site, "cores", int, required=True)
61 return [HighThroughputExecutor("local", provider=LocalProvider(), max_workers_per_node=cores)]
63 def select_executor(self, job: "ParslJob") -> str:
64 """Get the ``label`` of the executor to use to execute a job.
66 Parameters
67 ----------
68 job : `ParslJob`
69 Job to be executed.
71 Returns
72 -------
73 label : `str`
74 Label of executor to use to execute ``job``.
75 """
76 return "local"