You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:用Python同步运行数据采集程序并配置VitalSignsCapture参数

解决方案:异步采集ICU监护仪与HTTP数据并配置VitalSignsCapture

一、配置VitalSignsCapture应用内选项

假设VitalSignsCapture是可实例化的类,可通过初始化参数直接传入6项配置。若该类提供独立配置方法(如set_config()),也可改用对应方式传入:

# 定义ICU监护仪的6项配置(替换为你的实际参数)
icu_config = {
    "eth_interface": "eth0",
    "data_sample_rate": 500,
    "monitored_signals": ["heart_rate", "bp_sys", "bp_dia", "spo2", "temperature", "respiration"],
    "connection_timeout": 10,
    "buffer_size": 8192,
    "noise_filter": True
}

# 方式1:通过初始化参数传入配置
capture_device = VitalSignsCapture(**icu_config)

# 方式2:若类提供set_config方法
# capture_device = VitalSignsCapture()
# capture_device.set_config(icu_config)

二、异步启动双采集任务

使用concurrent.futures.ThreadPoolExecutor实现两个任务并行执行,确保时间戳同步。核心是同时触发两类数据采集,统一记录时间戳。

1. 编写采集函数

import csv
import time
import requests
from concurrent.futures import ThreadPoolExecutor

def capture_icu_data(capture_device, timestamp):
    # 使用统一传入的时间戳,保证与HTTP采集同步
    icu_raw_data = capture_device.fetch_latest_data()  # 假设VitalSignsCapture的采集方法
    return {"timestamp": timestamp, **icu_raw_data}

def capture_http_data(http_url, timestamp):
    # 使用同一时间戳
    response = requests.get(http_url, timeout=5)
    response.raise_for_status()
    http_raw_data = response.json()
    return {"timestamp": timestamp, **http_raw_data}

2. 并行执行并保存CSV

def save_combined_data(icu_result, http_result, csv_path):
    # 合并两类数据,自动对齐字段
    combined_data = {**icu_result, **http_result}
    fieldnames = list(combined_data.keys())

    # 写入CSV,自动创建表头(首次写入时)
    with open(csv_path, mode='a', newline='', encoding='utf-8') as f:
        writer = csv.DictWriter(f, fieldnames=fieldnames)
        if f.tell() == 0:
            writer.writeheader()
        writer.writerow(combined_data)

def main():
    # 初始化配置与参数
    icu_config = {
        "eth_interface": "eth0",
        "data_sample_rate": 500,
        "monitored_signals": ["heart_rate", "bp_sys", "bp_dia", "spo2", "temperature", "respiration"],
        "connection_timeout": 10,
        "buffer_size": 8192,
        "noise_filter": True
    }
    capture_device = VitalSignsCapture(**icu_config)
    http_endpoint = "http://your-data-source/api/real-time-data"
    csv_output = "icu_http_combined_data.csv"

    # 生成统一时间戳,确保两类数据时间完全对齐
    capture_timestamp = time.time()

    # 并行启动两个采集任务
    with ThreadPoolExecutor(max_workers=2) as executor:
        icu_task = executor.submit(capture_icu_data, capture_device, capture_timestamp)
        http_task = executor.submit(capture_http_data, http_endpoint, capture_timestamp)

        # 获取任务结果
        icu_data = icu_task.result()
        http_data = http_task.result()

    # 保存合并后的数据
    save_combined_data(icu_data, http_data, csv_output)
    print(f"采集完成,数据已保存至 {csv_output}")

if __name__ == "__main__":
    main()

三、关键优化点

  • 时间戳精度:提前生成统一时间戳并传入两个任务,避免线程调度导致的时间差,确保数据时间完全同步。
  • 异常处理:可在采集函数中添加try-except块,处理ICU设备连接失败、HTTP请求超时等异常,例如:
    def capture_http_data(http_url, timestamp):
        try:
            response = requests.get(http_url, timeout=5)
            response.raise_for_status()
            return {"timestamp": timestamp, **response.json()}
        except requests.exceptions.RequestException as e:
            return {"timestamp": timestamp, "http_error": str(e)}
    
  • 持续采集:若需要长期持续采集,可在main中添加循环,配合time.sleep()控制采集间隔。

内容的提问来源于stack exchange,提问作者WonderWoman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 04:52:35