的多线程 V5

 

 

import pandas as pd
import matplotlib.pyplot as plt
import time
from pathlib import Path
import logging
from concurrent.futures import ProcessPoolExecutor, as_completed
import argparse

def 设置日志():
    logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')

def 处理文件(file_path, input_directory, output_directory):
    try:
        data1 = pd.read_csv(file_path)
        nRow, nCol = data1.shape
        index = 0
        plt.figure()
        for i in range(nRow - 1):
            if data1.columns[i] == 'datetime':
                continue
            plt.subplot(nRow - 1, 1, index)
            plt.plot(data1.iloc[:, i])
            plt.title(data1.columns[i])
            index += 1
        formatted_time = time.strftime('%Y_%m_%d_%H_%M', time.localtime())
        file_stem = file_path.stem.replace('@', '_').replace(':', '_')
        output_path = Path(output_directory) / f"{formatted_time}_{file_stem}_3000.png"
        plt.savefig(str(output_path))
        logging.info(f"存储图片中... {output_path}")
        plt.close()
        return output_path
    except Exception as e:
        logging.error(f"保存图像时发生错误 {file_path}: {e}")
        return None

def 动画图表(output_directory):
    暂停 = False
    def 按键按下(event):
        nonlocal 暂停
        if event.key == ' ':  # 空格键切换暂停和继续
            暂停 = not 暂停
            print("Paused." if 暂停 else "Continuing...")
    fig, ax = plt.subplots()
    ax.axis('off')  # 关闭坐标轴
    plt.connect('key_press_event', 按键按下)
    paths = sorted(Path(output_directory).glob('*.png'), key=lambda p: p.stat().st_mtime, reverse=True)[:2]
    latest_paths = iter(paths)
    while True:
        try:
            path = next(latest_paths)
            print(f"正在显示文件: {path}")
            img = plt.imread(str(path))
            ax.imshow(img)
            creation_time = time.strftime("%Y-%m-%d %H:%M", time.localtime(path.stat().st_ctime))
            ax.set_title(f'File Created at: {creation_time}')
            plt.draw()
            plt.pause(55 if 暂停 else 60)  # 根据暂停状态设置持续时间
        except StopIteration:
            break  # 如果没有更多图片,退出循环
        except Exception as e:
            logging.error(f"显示图片时发生错误 {path}: {e}")
            break
    plt.close()

def 主程序(input_directory, output_directory):
    设置日志()
    logging.info("-----开始运行-----")
    sensor_dir = Path(input_directory)
    files = list(sensor_dir.glob('*.csv'))[:210000] + list(sensor_dir.glob('*.csv'))[-210000:]  # 只读取前210000笔数据和后210000笔数据
    logging.info("即将进行文件读取...")
    for i, f in enumerate(files, start=1):
        logging.info(f"文件读取中 {i}/{len(files)}")
        logging.info(f.name)
    fig_dir = Path(output_directory)
    if not fig_dir.exists():
        try:
            fig_dir.mkdir(parents=True, exist_ok=True)
        except FileExistsError:
            logging.info("目录已存在。")
    current_time = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())
    logging.info(f"读取完毕,读取时间:{current_time}  ^_^ 存储图片进行中...")
    with ProcessPoolExecutor() as executor:
        futures = [executor.submit(处理文件, file_path, input_directory, output_directory) for file_path in files]
        for future in as_completed(futures):
            result = future.result()
            if result is not None:
                logging.info(f"文件 {result} 处理完成")
            else:
                logging.warning("某个文件处理失败")
    logging.info("存储完毕")
    动画图表(output_directory)

if __name__ == '__main__':
    parser = argparse.ArgumentParser(description="Process CSV files and generate charts.")
    parser.add_argument("--input", type=str, default='C:\\Users\\Administrator\\Desktop\\Sensor', help="Input directory containing CSV files.")
    parser.add_argument("--output", type=str, default='C:\\Users\\Administrator\\Desktop\\Fig', help="Output directory to save generated images.")
    args = parser.parse_args()
    主程序(args.input, args.output)
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/460794.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ComfyUI - ComfyUI 工作流中集成 SAM2 + GroundingDINO 处理图像与视频 教程

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/143359538 免责声明:本文来源于个人知识与公开资料,仅用于学术交流,欢迎讨论,不支持转载。 SAM2 与…

阿里云物联网的通信方式

阿里云物联网通信的两种方式,一个是物模型(分为服务,事件,属性此篇文章只讲解物模型中的服务和属性用法),一个是自定义topic(要另外设置数据流转) 1.使用产品内的功能定义&#xff0…

mysql5.7.44 arm 源码编译安装

一、:下载源码:mysql官网:MySQL :: MySQL Downloads #####下载mysql安装包 : 网址:https://www.mysql.com/ 可在页面下载后上传或直接下载。 官网地址首页,拉到最底部,找到社区版本下载&#xf…

BatchNorm推理阶段和Conv合并

BatchNorm推理阶段和Conv合并 本文全文来自: https://www.cnblogs.com/xiaxuexiaoab/p/16422640.html。 只只作为自己的复习使用,不作他用。 BN层作用 批量归一化(Batch Normalization,BN)在深度学习中常放在卷积层之…

第二十章 Vue组件通信之父子通信

目录 一、引言 二、组件关系分类 三、组件通信的解决方案 3.1. 父子通信流程图 3.2. 父组件通过 props 将数据传递给子组件 3.2.1. 代码App.vue 3.2.2. 代码MySon.vue 3.3. 子组件利用 $emit 通知父组件修改更新 ​编辑3.3.1. 代码App.vue 3.3.2. 代码MySon.vue 3…

对话瀚荃:为何欧美拟统一采用USB-C充电接口?

【哔哥哔特导读】英国、美国等地都准备统一电气设备充电标准,USB-C接口为何成为业界首选?选择USB-C连接器,又有什么注意事项? 近期,有消息指出英国、美国等地均启动了关于电气设备充电标准的咨询活动,希望听取制造商、进口商、…

如何解决RabbitMQ消息的重复消费问题

什么情况下会导致消息的重复消费——在消费者还没成功发送自动确认机制时发生: 网络抖动消费者挂了 解决方案 每条消息设置一个唯一的标识id幂等方案:【Redis分布式锁、数据库锁(悲观锁、乐观锁)】 面试官:如何解决…

vue中el-table显示文本过长提示

1.el-table设置轻提示:show-overflow-tooltip“true“,改变轻提示宽度

Couldn‘t apply path mapping to the remote file.

Couldn’t apply path mapping to the remote file. /s6home2/zjw524/projects/seq2seq/code/deepnmtpycharm/deepNmt/code/deepNmtPycharm/deepNmt/model/Deep_NMT_Model.py can’t be found in project. You can continue debugging, but without the source. To fix that yo…

Tech Talk: 浅谈AI浪潮下的计算型存储SSD

引言 近年来,AI应用态势迅猛增加,对计算侧的算力和内存提出了更高的要求。GPU、HBM这些高性能高密计算部件和内存部件,在AI计算场景中作为必需品,成为市场热点。业界也在讨论能否把计算侧的业务卸载到存储侧,称为计算…

华为配置 之 STP

目录 简介: STP: RSTP: 如何改变根网桥: (1)改变优先级: (2)改变root: 各端口的状态: 总结: 简介: STP(Spanning Tree Protoco…

大数据挖掘和数据挖掘有什么不一样?

一、数据挖掘: 数据挖掘(Data Mining)是指从大量的、不完全的、有噪声的、模糊的、随机的数据中,提取隐含在其中的、人们事先不知道的、但又是潜在有用的信息和知识的过程。 数据挖掘的概念起源于 20 世纪 80 年代后期&#xff0c…

活动|2024 CodeFuse 「编码挑战季」活动已开启!欢迎报名参加

Hi~开发者们,1024 程序员节快乐,向你们致敬! CodeFuse 开源一年多以来,受到众多开发者的欢迎。在 1024 程序员节之际,CodeFuse 发起「编码挑战季」活动,诚邀广大开发者们参与 muAgent、MFTCoder、ModelCach…

Linux上本地部署KubeSphere与cpolar实现远程管理和监控集群

文章目录 前言1. 部署KubeSphere2. 本地测试访问3. Linux 安装Cpolar4. 配置KubeSphere公网访问地址5. 公网远程访问KubeSphere6. 固定KubeSphere公网地址 前言 本文主要介绍如何在Linux CentOS搭建KubeSphere并结合Cpolar内网穿透工具,实现远程访问,根…

Chrome浏览器音/视频无法自动播放

背景:由于google的一些制度,我们在写html项目时会发现刷新页面时无法自动播放audio和video,即使你添加了autoplay属性也无济于事, 但是IE和Edge浏览器是可以自动播放的。 解决方案: 本人在网上搜寻了很多方法&#xf…

vue的路由的两种模式 hash与history 详细讲解

文章目录 1. Hash 模式工作原理优点缺点使用示例 2. History 模式工作原理优点缺点服务器配置示例使用示例 总结 Vue Router 是 Vue.js 的官方路由管理器,它支持多种路由模式,其中最常用的两种是 hash 模式和 history 模式。下面我们详细讲解这两种模式的…

什么是目标检测?

首先计算机视觉能够解决哪些问题?? 分类、检测、分割 首先以下面这幅图为例: 分类就是输入一张图像,算法能够告诉我们图像中有什么类别,比如说猫或者狗,而并不知道这个类别在图像中的位置,如…

转移概率矩阵的计算

目录 T1T2 T1 写出图示信道的转移概率矩阵,并指出其是否为对称信道。 解: 信道的转移概率矩阵 P ( Y ∣ X ) [ 0.99 0.01 0 0.005 0.99 0.005 0 0.01 0.99 ] P(Y|X)\begin{bmatrix}0.99&0.01&0\\0.005&0.99&0.005\\0&0.01&0.9…

Linux中Samba服务配置和管理

文章目录 一、Samba介绍1.1、Samba是什么1.2、Samba的核心功能1.3、Samba的主要组件1.4、Samba的工作流程1.5、Samba主要配置文件smb.conf 二、Samba安装2.1、更新yum源2.2、安装Samba客户端和服务器软件包2.3、启动Samba 三、Samba的使用3.1、设置Samba服务的全局选项3.2、tes…

MS01SF1 精准测距UWB模组助力露天采矿中的人车定位安全和作业效率提升

在当今矿业行业,随着全球对资源需求的不断增加和开采难度的逐步提升,传统的作业方式面临着越来越多的挑战。露天矿山开采,因其大规模的作业环境和复杂的地形特点,面临着作业人员的安全风险、设备调度的高难度以及资源利用率低下等…