训练跑一半不动了,停在data = self._data_queue.get(timeout=timeout)

文章讨论了在使用opencv-python时遇到的线程问题,尝试通过卸载conda版本并用pip安装来解决,同时也调整了num_workers参数,发现设置为2时程序运行正常,但8和4则不行。数据预处理未发现问题。另外,将环境切换到torch1.8也解决了问题。作者分享了一个调试技巧,即通过Ctrl+C查看代码停在哪一行来定位问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

可能是第三方库导致的线程问题,可以num_workers设置为0,但是太慢,github上说卸载conda安装的opencv-python 用pip install 安装,cv2是第三方库,可能是其导致的线程问题,也可能是dataloader里的数据有点问题,导致的线程出错啥的,所以我

1、重新装了opencv-python

2、numworks设置成2,就好使了,8还是不行,4也不行,也没有筛选不好的数据,数据应该是没啥问题,而且numworkers设置成4感觉比8快好多?

pip install opencv-python --user(--user是为了避免权限不够报错的问题)

另一种方式:换成torch1.8就也可以

一个调试经验:当程序不动时可以ctrl + c然后看终端里是在哪一行里代码停止的,来看程序卡到哪里

为了解决上述问题,以下是修改后的代码: ```python import hashlib import streamlit as st import sqlite3 import pandas as pd from datetime import datetime, timedelta, time as datetime_time import threading from queue import Queue # 数据库配置 DB_PATH = "enterprise.db" MAIN_TABLE = "生产结果表" class ThreadSafeDB: """线程安全的数据库连接池""" _instance = None _lock = threading.Lock() def __new__(cls): with cls._lock: if not cls._instance: cls._instance = super().__new__(cls) cls._instance._connection_pool = Queue(maxsize=5) for _ in range(5): conn = sqlite3.connect( DB_PATH, check_same_thread=False, timeout=10 ) cls._instance._connection_pool.put(conn) return cls._instance def get_conn(self): return self._connection_pool.get() def return_conn(self, conn): self._connection_pool.put(conn) def get_db_connection(): """获取数据库连接(线程安全)""" db_pool = ThreadSafeDB() return db_pool.get_conn() @st.cache_data(ttl=3600, show_spinner=False) def fetch_production_data(params): """获取生产数据(线程安全版本)""" try: conn = get_db_connection() try: where_clause, args = build_base_query(params) base_query = f"SELECT * FROM `{MAIN_TABLE}`" if where_clause: base_query += f" WHERE {where_clause}" df = pd.read_sql(base_query, conn, params=args) return df finally: ThreadSafeDB().return_conn(conn) except Exception as e: st.error(f"数据库查询失败: {str(e)}") return pd.DataFrame() def build_base_query(params): """构建基础查询条件""" conditions = [] args = [] if params.get('unit'): conditions.append("机组名 = ?") args.append(params['unit']) if params.get('start_time'): conditions.append("生产开始时间 >= ?") args
最新发布
03-20
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值