python - 通过 Python 获取 docker stats 的问题
问题描述
我尝试使用 Python 通过使用 Python 的 docker 模块来获取 docker stats。代码是:
import docker
cli = docker.from_env()
for container in cli.containers.list():
stream = container.stats()
print(next(stream))
我运行了 6 个 docker 容器,但是当我运行代码时,需要几秒钟才能获取所有容器的统计信息,那么有没有一些好的方法可以立即获取统计信息?
解决方案
Docker stats 本身需要一点时间,其中很大一部分是等待下一个值通过流
$ time docker stats 1339f13154aa --no-stream
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
...
real 0m1.556s
user 0m0.020s
sys 0m0.015s
您可以通过在 parralell 中运行命令来减少执行时间,而不是一次一个。
Digital Ocean 提供了一个很好的教程,教你如何使用ThreadPoolExecutor
:
import requests
import concurrent.futures
def get_wiki_page_existence(wiki_page_url, timeout=10):
response = requests.get(url=wiki_page_url, timeout=timeout)
page_status = "unknown"
if response.status_code == 200:
page_status = "exists"
elif response.status_code == 404:
page_status = "does not exist"
return wiki_page_url + " - " + page_status
wiki_page_urls = [
"https://en.wikipedia.org/wiki/Ocean",
"https://en.wikipedia.org/wiki/Island",
"https://en.wikipedia.org/wiki/this_page_does_not_exist",
"https://en.wikipedia.org/wiki/Shark",
]
with concurrent.futures.ThreadPoolExecutor() as executor:
futures = []
for url in wiki_page_urls:
futures.append(executor.submit(get_wiki_page_existence, wiki_page_url=url))
for future in concurrent.futures.as_completed(futures):
print(future.result())
推荐阅读
- video-streaming - 带有 iframe 信息的实时 HLS 生成器
- postgresql - 如何正确分组 Postgres 数据
- pandas - 以 pandas 列作为参数调用函数
- excel - VBA - 填充自定义功能区下拉/列表框
- python - 'requests' 导入的模块在 IDLE 上不起作用
- angular - 如何强制 this.gridOption.getRowStyle 函数?
- python - 从表格中排除一些结果-Web Scraping with Python
- postgresql - 从 Postgresql 中的 JSONB 对象中删除键/值
- twitter-bootstrap-3 - 实现多列网格的最佳方法
- r - 忽略过滤器函数中的参数