parsl 2025.6.2__py3-none-any.whl → 2025.6.16__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/monitoring/monitoring.py +3 -2
- parsl/monitoring/radios/filesystem_router.py +1 -1
- parsl/monitoring/radios/udp_router.py +1 -9
- parsl/tests/test_monitoring/test_basic.py +25 -8
- parsl/version.py +1 -1
- {parsl-2025.6.2.dist-info → parsl-2025.6.16.dist-info}/METADATA +2 -2
- {parsl-2025.6.2.dist-info → parsl-2025.6.16.dist-info}/RECORD +15 -15
- {parsl-2025.6.2.data → parsl-2025.6.16.data}/scripts/exec_parsl_function.py +0 -0
- {parsl-2025.6.2.data → parsl-2025.6.16.data}/scripts/interchange.py +0 -0
- {parsl-2025.6.2.data → parsl-2025.6.16.data}/scripts/parsl_coprocess.py +0 -0
- {parsl-2025.6.2.data → parsl-2025.6.16.data}/scripts/process_worker_pool.py +0 -0
- {parsl-2025.6.2.dist-info → parsl-2025.6.16.dist-info}/LICENSE +0 -0
- {parsl-2025.6.2.dist-info → parsl-2025.6.16.dist-info}/WHEEL +0 -0
- {parsl-2025.6.2.dist-info → parsl-2025.6.16.dist-info}/entry_points.txt +0 -0
- {parsl-2025.6.2.dist-info → parsl-2025.6.16.dist-info}/top_level.txt +0 -0
parsl/monitoring/monitoring.py
CHANGED
@@ -144,7 +144,6 @@ class MonitoringHub(RepresentationMixin):
|
|
144
144
|
kwargs={"comm_q": udp_comm_q,
|
145
145
|
"resource_msgs": self.resource_msgs,
|
146
146
|
"exit_event": self.router_exit_event,
|
147
|
-
"hub_address": self.hub_address,
|
148
147
|
"udp_port": self.hub_port,
|
149
148
|
"run_dir": dfk_run_dir,
|
150
149
|
"logging_level": logging.DEBUG if self.monitoring_debug else logging.INFO,
|
@@ -172,7 +171,9 @@ class MonitoringHub(RepresentationMixin):
|
|
172
171
|
self.udp_router_proc.pid, self.dbm_proc.pid)
|
173
172
|
|
174
173
|
self.filesystem_proc = SpawnProcess(target=filesystem_router_starter,
|
175
|
-
|
174
|
+
kwargs={"q": self.resource_msgs,
|
175
|
+
"run_dir": dfk_run_dir,
|
176
|
+
"exit_event": self.router_exit_event},
|
176
177
|
name="Monitoring-Filesystem-Process",
|
177
178
|
daemon=True
|
178
179
|
)
|
@@ -16,7 +16,7 @@ from parsl.utils import setproctitle
|
|
16
16
|
|
17
17
|
|
18
18
|
@wrap_with_logs
|
19
|
-
def filesystem_router_starter(q: Queue[TaggedMonitoringMessage], run_dir: str, exit_event: Event) -> None:
|
19
|
+
def filesystem_router_starter(*, q: Queue[TaggedMonitoringMessage], run_dir: str, exit_event: Event) -> None:
|
20
20
|
logger = set_file_logger(f"{run_dir}/monitoring_filesystem_radio.log",
|
21
21
|
name="monitoring_filesystem_radio",
|
22
22
|
level=logging.INFO)
|
@@ -23,10 +23,7 @@ class MonitoringRouter:
|
|
23
23
|
|
24
24
|
def __init__(self,
|
25
25
|
*,
|
26
|
-
hub_address: str,
|
27
26
|
udp_port: Optional[int] = None,
|
28
|
-
|
29
|
-
monitoring_hub_address: str = "127.0.0.1",
|
30
27
|
run_dir: str = ".",
|
31
28
|
logging_level: int = logging.INFO,
|
32
29
|
atexit_timeout: int = 3, # in seconds
|
@@ -37,8 +34,6 @@ class MonitoringRouter:
|
|
37
34
|
|
38
35
|
Parameters
|
39
36
|
----------
|
40
|
-
hub_address : str
|
41
|
-
The ip address at which the workers will be able to reach the Hub.
|
42
37
|
udp_port : int
|
43
38
|
The specific port at which workers will be able to reach the Hub via UDP. Default: None
|
44
39
|
run_dir : str
|
@@ -58,7 +53,6 @@ class MonitoringRouter:
|
|
58
53
|
level=logging_level)
|
59
54
|
self.logger.debug("Monitoring router starting")
|
60
55
|
|
61
|
-
self.hub_address = hub_address
|
62
56
|
self.atexit_timeout = atexit_timeout
|
63
57
|
|
64
58
|
self.loop_freq = 10.0 # milliseconds
|
@@ -121,15 +115,13 @@ def udp_router_starter(*,
|
|
121
115
|
resource_msgs: mpq.Queue,
|
122
116
|
exit_event: Event,
|
123
117
|
|
124
|
-
hub_address: str,
|
125
118
|
udp_port: Optional[int],
|
126
119
|
|
127
120
|
run_dir: str,
|
128
121
|
logging_level: int) -> None:
|
129
122
|
setproctitle("parsl: monitoring UDP router")
|
130
123
|
try:
|
131
|
-
router = MonitoringRouter(
|
132
|
-
udp_port=udp_port,
|
124
|
+
router = MonitoringRouter(udp_port=udp_port,
|
133
125
|
run_dir=run_dir,
|
134
126
|
logging_level=logging_level,
|
135
127
|
resource_msgs=resource_msgs,
|
@@ -4,8 +4,9 @@ import time
|
|
4
4
|
import pytest
|
5
5
|
|
6
6
|
import parsl
|
7
|
-
from parsl import HighThroughputExecutor
|
7
|
+
from parsl import HighThroughputExecutor, ThreadPoolExecutor
|
8
8
|
from parsl.config import Config
|
9
|
+
from parsl.executors.status_handling import BlockProviderExecutor
|
9
10
|
from parsl.monitoring import MonitoringHub
|
10
11
|
|
11
12
|
|
@@ -23,6 +24,13 @@ def this_app():
|
|
23
24
|
# The below fresh configs are for use in parametrization, and should return
|
24
25
|
# a configuration that is suitably configured for monitoring.
|
25
26
|
|
27
|
+
def thread_config():
|
28
|
+
c = Config(executors=[ThreadPoolExecutor()],
|
29
|
+
monitoring=MonitoringHub(hub_address="localhost",
|
30
|
+
resource_monitoring_interval=0))
|
31
|
+
return c
|
32
|
+
|
33
|
+
|
26
34
|
def htex_config():
|
27
35
|
"""This config will use htex's default htex-specific monitoring radio mode"""
|
28
36
|
from parsl.tests.configs.htex_local_alternate import fresh_config
|
@@ -121,19 +129,28 @@ def row_counts_parametrized(tmpd_cwd, fresh_config):
|
|
121
129
|
(c, ) = result.first()
|
122
130
|
assert c == 4
|
123
131
|
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
132
|
+
if isinstance(config.executors[0], BlockProviderExecutor):
|
133
|
+
# This case assumes that a BlockProviderExecutor is actually being
|
134
|
+
# used with blocks. It might not be (for example, Work Queue and
|
135
|
+
# Task Vine can be configured to launch their own workers; and it
|
136
|
+
# is a valid (although occasional) use of htex to launch executors
|
137
|
+
# manually.
|
138
|
+
# If you just added test cases like that and are wondering why this
|
139
|
+
# assert is failing, that might be why.
|
140
|
+
result = connection.execute(text("SELECT COUNT(*) FROM block"))
|
141
|
+
(c, ) = result.first()
|
142
|
+
assert c >= 2, "There should be at least two block statuses from a BlockProviderExecutor"
|
129
143
|
|
130
144
|
result = connection.execute(text("SELECT COUNT(*) FROM resource"))
|
131
145
|
(c, ) = result.first()
|
132
|
-
|
146
|
+
if isinstance(config.executors[0], ThreadPoolExecutor):
|
147
|
+
assert c == 0, "Thread pool executors should not be recording resources"
|
148
|
+
else:
|
149
|
+
assert c >= 1, "Task execution should have created some resource records"
|
133
150
|
|
134
151
|
|
135
152
|
@pytest.mark.local
|
136
|
-
@pytest.mark.parametrize("fresh_config", [htex_config, htex_filesystem_config, htex_udp_config])
|
153
|
+
@pytest.mark.parametrize("fresh_config", [thread_config, htex_config, htex_filesystem_config, htex_udp_config])
|
137
154
|
def test_row_counts_base(tmpd_cwd, fresh_config):
|
138
155
|
row_counts_parametrized(tmpd_cwd, fresh_config)
|
139
156
|
|
parsl/version.py
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: parsl
|
3
|
-
Version: 2025.6.
|
3
|
+
Version: 2025.6.16
|
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/2025.06.
|
6
|
+
Download-URL: https://github.com/Parsl/parsl/archive/2025.06.16.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=JNAfgdZvQSsxVyUp229OOUqWwf_ZUhpmw8X9CdF3i6k,3614
|
|
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=codTX6_KLhgeTwNkRzc1lo4bgc1M93eJ-lkqOO98fvk,14331
|
11
|
-
parsl/version.py,sha256=
|
11
|
+
parsl/version.py,sha256=OcBKEFH1nzg7uj2vxNsoaix5V1tSrNXWRIaIe8jZHcU,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
|
@@ -117,7 +117,7 @@ parsl/monitoring/__init__.py,sha256=0ywNz6i0lM1xo_7_BIxhETDGeVd2C_0wwD7qgeaMR4c,
|
|
117
117
|
parsl/monitoring/db_manager.py,sha256=L0c5S9ockq0UIchT2bjmkSAWXS-t0G-Q_neOIBfLbm0,33444
|
118
118
|
parsl/monitoring/errors.py,sha256=GParOWoCTp2w1Hmif0PaF5J6p5dWVOwyhO18bcvr_uo,277
|
119
119
|
parsl/monitoring/message_type.py,sha256=Khn88afNxcOIciKiCK4GLnn90I5BlRTiOL3zK-P07yQ,401
|
120
|
-
parsl/monitoring/monitoring.py,sha256=
|
120
|
+
parsl/monitoring/monitoring.py,sha256=bMCKmNfpDseq79doJ492hru5DjxR-KR3Qt4bR0W0IMg,9802
|
121
121
|
parsl/monitoring/remote.py,sha256=t0qCTUMCzeJ_JOARFpjqlTNrAWdEb20BxhmZh9X7kEM,13728
|
122
122
|
parsl/monitoring/types.py,sha256=oOCrzv-ab-_rv4pb8o58Sdb8G_RGp1aZriRbdf9zBEk,339
|
123
123
|
parsl/monitoring/queries/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -125,11 +125,11 @@ parsl/monitoring/queries/pandas.py,sha256=0Z2r0rjTKCemf0eaDkF1irvVHn5g7KC5SYETvQ
|
|
125
125
|
parsl/monitoring/radios/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
126
126
|
parsl/monitoring/radios/base.py,sha256=MBW3aAbxQY7TMuNGZEN15dWoy3mAELOqz-GMN1d7vF4,221
|
127
127
|
parsl/monitoring/radios/filesystem.py,sha256=ioZ3jOKX5Qf0DYRtWmpCEorfuMVbS58OMS_QV7DOFOs,1765
|
128
|
-
parsl/monitoring/radios/filesystem_router.py,sha256=
|
128
|
+
parsl/monitoring/radios/filesystem_router.py,sha256=EMT4EXJV35mfMdbTLEWDwdcI6hQPgfTFlkvkiXymgxw,2149
|
129
129
|
parsl/monitoring/radios/htex.py,sha256=qBu4O5NYnSETHX0ptdwxSpqa2Pp3Z_V6a6lb3TbjKm4,1643
|
130
130
|
parsl/monitoring/radios/multiprocessing.py,sha256=fsfaaoMDp6VJv1DSAl-P0R2ofO6jp13byx6NsPItV3Y,655
|
131
131
|
parsl/monitoring/radios/udp.py,sha256=bTpt7JYp-5hyBBLzgiLj1_BlSTn28UVp39OYgVGLXCw,1613
|
132
|
-
parsl/monitoring/radios/udp_router.py,sha256=
|
132
|
+
parsl/monitoring/radios/udp_router.py,sha256=FuwmfVRL90AjxtkbpWDtV_OMvDvDTh2KwobnScGZa04,5430
|
133
133
|
parsl/monitoring/radios/zmq.py,sha256=fhoHp9ylhf-D3eTJb2aSHRsuic8-FJ_oRNGnniGkCAI,592
|
134
134
|
parsl/monitoring/radios/zmq_router.py,sha256=ksaWb9bceyFhGGMDC8Nc16JhQ3qpmg8uXQypbrvvtcg,7984
|
135
135
|
parsl/monitoring/visualization/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -338,7 +338,7 @@ parsl/tests/test_htex/test_worker_failure.py,sha256=Uz-RHI-LK78FMjXUvrUFmo4iYfmp
|
|
338
338
|
parsl/tests/test_htex/test_zmq_binding.py,sha256=G7D2_p9vOekgpB50MBiPRwtIz98DEkUpMqA3rdwzYTQ,4397
|
339
339
|
parsl/tests/test_monitoring/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
340
340
|
parsl/tests/test_monitoring/test_app_names.py,sha256=A-mOMCVhZDnUyJp32fsTUkHdcyval8o7WPEWacDkbD4,2208
|
341
|
-
parsl/tests/test_monitoring/test_basic.py,sha256=
|
341
|
+
parsl/tests/test_monitoring/test_basic.py,sha256=QJS0SJkf1KV6A4UvikBu-wAIcBJZVoVe-BSVWgyFonI,6180
|
342
342
|
parsl/tests/test_monitoring/test_db_locks.py,sha256=3s3c1xhKo230ZZIJ3f1Ca4U7LcEdXnanOGVXQyNlk2U,2895
|
343
343
|
parsl/tests/test_monitoring/test_exit_helper.py,sha256=ob8Qd1hlkq_mowygfPetTnYN9LfuqeXHRpPilSfDSog,1232
|
344
344
|
parsl/tests/test_monitoring/test_fuzz_zmq.py,sha256=SQNNHhXxHB_LwW4Ujqkgut3lbG0XVW-hliPagQQpiTc,3449
|
@@ -460,13 +460,13 @@ parsl/usage_tracking/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hS
|
|
460
460
|
parsl/usage_tracking/api.py,sha256=iaCY58Dc5J4UM7_dJzEEs871P1p1HdxBMtNGyVdzc9g,1821
|
461
461
|
parsl/usage_tracking/levels.py,sha256=xbfzYEsd55KiZJ-mzNgPebvOH4rRHum04hROzEf41tU,291
|
462
462
|
parsl/usage_tracking/usage.py,sha256=hbMo5BYgIWqMcFWqN-HYP1TbwNrTonpv-usfwnCFJKY,9212
|
463
|
-
parsl-2025.6.
|
464
|
-
parsl-2025.6.
|
465
|
-
parsl-2025.6.
|
466
|
-
parsl-2025.6.
|
467
|
-
parsl-2025.6.
|
468
|
-
parsl-2025.6.
|
469
|
-
parsl-2025.6.
|
470
|
-
parsl-2025.6.
|
471
|
-
parsl-2025.6.
|
472
|
-
parsl-2025.6.
|
463
|
+
parsl-2025.6.16.data/scripts/exec_parsl_function.py,sha256=YXKVVIa4zXmOtz-0Ca4E_5nQfN_3S2bh2tB75uZZB4w,7774
|
464
|
+
parsl-2025.6.16.data/scripts/interchange.py,sha256=_FRB1LxkL9vnT3y24NTXHOzotMlDJEXwF5ZZCjGmcww,28909
|
465
|
+
parsl-2025.6.16.data/scripts/parsl_coprocess.py,sha256=zrVjEqQvFOHxsLufPi00xzMONagjVwLZbavPM7bbjK4,5722
|
466
|
+
parsl-2025.6.16.data/scripts/process_worker_pool.py,sha256=__gFeFQJpV5moRofj3WKQCnKp6gmzieXjzkmzVuTmX4,41123
|
467
|
+
parsl-2025.6.16.dist-info/LICENSE,sha256=tAkwu8-AdEyGxGoSvJ2gVmQdcicWw3j1ZZueVV74M-E,11357
|
468
|
+
parsl-2025.6.16.dist-info/METADATA,sha256=LH8djiRZNSrLypZ60ByaTA6Kr7HmSs7HLHQdYqhTD1E,4055
|
469
|
+
parsl-2025.6.16.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
|
470
|
+
parsl-2025.6.16.dist-info/entry_points.txt,sha256=XqnsWDYoEcLbsMcpnYGKLEnSBmaIe1YoM5YsBdJG2tI,176
|
471
|
+
parsl-2025.6.16.dist-info/top_level.txt,sha256=PIheYoUFQtF2icLsgOykgU-Cjuwr2Oi6On2jo5RYgRM,6
|
472
|
+
parsl-2025.6.16.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
|