concurrent metrics

This commit is contained in:
Jörn-Michael Miehe 2023-09-02 02:14:40 +00:00
parent e159a17f76
commit 32231f1b2d

View file

@ -1,12 +1,26 @@
#!/usr/bin/python3 #!/usr/bin/python3
import asyncio import asyncio
import concurrent.futures
from . import metrics from . import metrics
from .settings import SETTINGS from .settings import SETTINGS
def run_metrics(*_metrics: metrics.Metric) -> None: def run_metrics(
executor: concurrent.futures.Executor,
*_metrics: metrics.Metric,
) -> None:
# === conc experiment ===
futures = concurrent.futures.wait(
executor.submit(metric) for metric in _metrics
).done
print(list(future.result() for future in futures))
# === end conc ===
reports = (metric() for metric in _metrics) reports = (metric() for metric in _metrics)
# create single report from metrics # create single report from metrics
@ -20,24 +34,26 @@ def run_metrics(*_metrics: metrics.Metric) -> None:
report.push_webhook() report.push_webhook()
async def async_main() -> None: async def async_main_loop() -> None:
loop = asyncio.get_running_loop() loop = asyncio.get_running_loop()
while True: while True:
await asyncio.gather( with concurrent.futures.ThreadPoolExecutor() as pool:
asyncio.sleep(SETTINGS.interval), await asyncio.gather(
loop.run_in_executor( asyncio.sleep(SETTINGS.interval),
None, run_metrics, loop.run_in_executor(
metrics.cpu, None, run_metrics,
metrics.memory, pool,
metrics.disk, metrics.cpu,
metrics.external, metrics.memory,
), metrics.disk,
) metrics.external,
),
)
def main() -> None: def main() -> None:
asyncio.run(async_main()) asyncio.run(async_main_loop())
if __name__ == "__main__": if __name__ == "__main__":