import csv
import threading
import queue
import time
from concurrent.futures import ThreadPoolExecutor, as_completed,wait
from dbutils.persistent_db import PersistentDB
import sqlite3
class Pool(object): # 数据库连接池
__pool = None # 记录第一个被创建的对象引用
config = {
'database': 'lac_ci.db' # 数据库文件路径
}
def __new__(cls, *args, **kwargs):
"""创建连接池对象 单例设计模式(每个线程中只创建一个连接池对象) PersistentDB为每个线程提供专用的连接池"""
if cls.__pool is None: # 如果__pool为空,说明创建的是第一个连接池对象
cls.__pool = PersistentDB(sqlite3, maxusage=None, closeable=False, **cls.config)
return cls.__pool
class Connect:
def __enter__(self):
"""自动从连接池中取出一个连接"""
db_pool = Pool()
self.conn = db_pool.connection()
self.cur = self.conn.cursor()
return self
def __exit__(self, exc_type, exc_val, exc_tb):
"""自动释放当前连接资源 归还给连接池"""
self.cur.close()
self.conn.close()
"""
SQLite 由于线程安全机制 不支持 PooledDB 线程共享连接模式 故使用PersistentDB 线程专用连接模式 为每个线程单独开连接池
SQLite 只支持读并发 即:写独占,读共享,所以要在修改操作时使用互斥锁。 为了体现精简性,这里就不演示了
PooledDB()中的参数解释自行查找
"""
# 定义一个队列,用于在读取线程和写入线程之间传递数据
data_queue = queue.Queue()
mutex = threading.Lock()
reader = None
# 创建数据库连接池
pool = None
# 定义一个函数,用于处理每一行数据
def process_row():
while True:
mutex.acquire()
row = next(reader, "end")
mutex.release()
if(row == "end"):
break;
# 获取第四列的数值并加一
lac = int(row[0])
ci = int(row[1])
# 查询数据库是否已经存在
with Connect() as conn:
cursor = conn.cur.execute("SELECT lon,lat,radius FROM LacCiT WHERE lac = ? AND ci = ?",(lac, ci))
result = cursor.fetchone()
if(result != None):
lat = result[0]
lon = result[1]
radius = result[2]
# 将结果写入
row.extend([str(lon),str(lat),str(radius)])
else:
pass
# 将处理后的行放入队列
data_queue.put(row)
# 定义一个函数,用于写入数据到CSV文件
def write_csv(filename):
with open(filename, 'w', newline='') as file:
writer = csv.writer(file)
while True:
try:
# 从队列中获取处理后的行并写入文件
row = data_queue.get(timeout=1) # 设置超时以避免无限等待
writer.writerow(row)
data_queue.task_done()
except queue.Empty:
# 队列为空,说明数据已经全部处理完毕
break
if __name__ == "__main__":
# 指定你的CSV文件路径
csv_file = 'lac_tt.csv'
start_time = time.time() # 记录程序开始时间
obj_list = []
file = open(csv_file, 'r', newline='')
reader = csv.reader(file)
with ThreadPoolExecutor(max_workers=10) as executor:
executor.submit(process_row)
executor.submit(process_row)
executor.submit(process_row)
write_csv('new_file.csv')
print("CSV文件处理完成。")
end_time = time.time() # 记录程序结束时间
elapsed_time = end_time - start_time # 计算运行时间
print(f"程序运行时间:{elapsed_time:.2f} 秒")
相关推荐
以LAN8720A为例的以太网硬件设计方案
输入时钟(XTAL1/CLKIN,XTAL2):推荐外加25MHz(性价比较高)晶振为PHY芯片提供时钟,PHY芯片内部PLL将其倍频为50MHz来使用,亦可使用直接使用50MHz晶振。三位MODE通过高低电平组合分别对应以上8种模式 ,包含10M半双工,10M全双工,100M半双工,100M全双工,是否启用自协商协议,CRS是否有效等。VDDCR:1.2V电源,可由芯片内部稳压电源提供,亦可由外部电源提供,由外部电源提供可降低芯片功耗。REF_CLK:参考时钟,由MAC或外部时钟晶振向PHY芯片提供。
Python学习系列之多线程
一、多线程定义 进程是由若干线程组成的,一个进程至少有一个线程,叫主线程。 多线程类似于同时执行多个不同程序,多线程运行有如下优点: 使用线程可以把占据长时间的程序中的任务放到后台去处理,不会出现界面卡顿的情况。 用户界面更加友好,这样比如用户点击了一个按钮去触发某些事件的处理,可以弹出一个进度条来显示处理的进度。 程序的运行速度可能加快。 在一些等待的任务实现上如用户输入、...
欢乐熊大话蓝牙知识16:蓝牙是怎么找设备的?扫描与广播的“对话内幕”
蓝牙是怎么找设备的?扫描与广播的对话技术介绍
一文吃透python多线程(全面总结)
python多线程,包含创建、线程锁、线程通信、线程池等讲解
RH850从0搭建Autosar开发环境【7】- Davinci Configurator之CanTp模块配置详解(上)
RH850从0搭建Autosar开发环境【7】- Davinci Configurator之CanTp模块配置详解(上)
北斗导航:提高RTK定位精度的GIS应用
其中,RTK(Real-Time Kinematic)定位技术是一种实时差分定位技术,通过利用基准站的观测数据来对移动站的测量值进行差分处理,以提高定位精度。差分处理的关键是基准站的观测数据,基准站通过全球定位系统(如北斗导航系统)获取卫星信号并记录观测数据。通过使用RTK定位技术,结合北斗导航系统的观测数据和差分处理,可以实现高精度的定位结果。我们将介绍RTK定位的原理、使用北斗导航系统进行RTK定位的步骤,以及如何将定位结果与GIS数据进行集成和可视化展示。步骤1:设置基准站和移动站。
python学习——多线程
【代码】python学习——多线程。
ATE Pin Electronics电路学习总结
PinElectronics(PE)是ATE测试机的核心模拟前端电路,负责ATE与芯片间的信号转换与交互。主要包含四大功能模块:Driver实现逻辑信号到模拟电平的转换(VIH/VIL可编程);Receiver对DUT输出进行采样比较(VOH/VOL判定);ActiveLoad施加可编程电流负载;PPMU进行精密电压/电流测量。PE的性能直接影响功能测试和直流参数测试的精度,需定期校准维护。关键参数包括:Driver电压精度(±5mV)、Receiver比较精度(±10-50mV)、PPMU测量精度(±1-
Python教程:一文掌握Python多线程(很详细)
多线程是指在同一进程内同时运行多个线程,每个线程执行不同的任务,实现并发执行。每个线程都有自己的执行路径,可以独立运行和调度,共享进程的资源。
【深度学习新浪潮】什么是system 1和system 2?
System 1(快速生成)指大模型直接基于输入生成响应,无需显式中间推理步骤。例如,GPT-4等模型在默认状态下通过Transformer直接输出结果,擅长快速回答简单问题或生成连贯文本,但在复杂逻辑任务中可能出错。这类模型的内部计算以向量形式隐式进行,难以处理符号推理等需要离散决策的任务。System 2(慢速推理)指模型通过生成中间token(如思维链、分步推导)或多次调用LLM进行复杂推理。
YOLOv11魔改高效涨点 | 注意力篇 | SimAM注意力:基于神经科学的 3D 注意力机制,三维权重的暴力美学,无参数也能暴力涨点?代码极简,彻底疯狂!!!
在本文中,我们为卷积神经网络(ConvNets)提出了一个概念简单但非常有效的注意力模块。与现有的通道注意力(Channel-wise)和空间注意力(Spatial-wise)模块不同,我们的模块在不向原始网络添加参数的情况下,推断出层中特征图的 3D 注意力权重。具体来说,我们基于一些知名的神经科学理论,提出优化一个能量函数来寻找每个神经元的重要性。我们进一步推导出了该能量函数的快速闭式解,并表明该解可以用不到十行代码实现。
再学Python——多线程
进程 是程序的一次执行。每个进程都有自己的地址空间,内存,数据线及其它记录琪运行轨迹的辅助数据 线程 所有线程运行在同一个进程当中,共享相同的运行环境。线程有开始顺序执行和结束三个部分 start_new_thread(funtion,args kwargs=None) 产生一个线程,在新的线程中用指定的参数和可选的kwargs来调用这个函数。 注意:使用这个方法时,一定要加time.sleep(),否则线程可能不执行 import thread import time def func1():
DTI-ALPS处理笔记
前段时间刚好学习了一下DTI-ALPS处理(diffusion tensor image analysis along the perivascular space ),记录一下,以便后续学习。ALPS是2017年发表在《Japanese Journal of Radiology》的一篇文章首次提出的 (),主要用于无创评估脑内淋巴系统功能的衡量数值。C图和D图中的蓝色部分是投射纤维,绿色部分是联合纤维,红色部分是皮下纤维。
【跟我一起学Python吧】Python 多线程
其实自我感觉Python的多线程很类似于Java的多线程机制,但是比JAVA的多线程更灵活。在早期的Python多线程实现中,采用了thread模块。例如: Python代码 fromtimeimportctime,sleep fromthreadimportstart_new_thread defloop1(): ...
精雕软件(JDpaint) 5.5 绿色版
精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版
ssm框架搭建
这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载
python多线程学了多久_这样学 Python 多线程与进程(一)
众所周知,Python 中的多线程是一个假的多线程,对于多核 CPU,由于受限于 GIL 全局解释锁,同一时刻只能有一个线程在运行。但是对于经常爬虫网络请求、下载图片等 IO 密集型操作,多线程变的很实用,能在一定程度上提高程序运行的效率。下面带大家从零开始学习 Python 多线程。1、单线程在单线程程序中可能包含多个方法,运行程序后,默认是在一个主线程里按顺序运行。import timedef...
win10 跳过U8环境检测的IE WebControls.rar
win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。
python多线程_这样学 Python 多线程与进程(一)
点击上方“AirPython”,选择“置顶公众号”第一时间获取 Python 技术干货!阅读文本大概需要 5 分钟。众所周知,Python 中的多线程是一个假的多线程,对于多核 CPU,由于受限于 GIL 全局解释锁,同一时刻只能有一个线程在运行。但是对于经常爬虫网络请求、下载图片等 IO 密集型操作,多线程变的很实用,能在一定程度上提高程序运行的效率。下面带大家从零开始学习 Pytho...
ET2012新版免狗免安装绿色软件
ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,
python多线程学了多久_python多线程学习(一)
多线程和多进程是什么自行google补脑,廖雪峰官网也有,但是不够简洁,有点晕,所以就整个简单的范例。对于python多线程的理解,我花了很长时间,搜索的大部份文章都不够通俗易懂。所以,这里力图用简单的例子,让你对多线程有个初步的认识。单线程在好些年前的MS-DOS时代,操作系统处理问题都是单任务的,我想做听音乐和看电影两件事儿,那么一定要先排一下顺序。(好吧!我们不纠结在DOS时代是否有听音乐...
python多线程学了多久_python程序默认执行与多线程
一、程序执行流程和进程线程简述1程序执行流程有类似脚本程序或编程经验的同学都知道,程序默认是自上而下,从左到右的按顺序执行,也叫串行执行;而多线程类似于并行执行,即A模块(函数)执行时B也执行不需要等A执行完再执行,这里请区别对待并发执行(同一时间执行);以上是简单概念性描述,2什么是线程与进程?线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进...
从零开始学 Python 之 初识 Python 多线程
我们知道,多线程与单线程相比,可以提高 CPU 利用率,加快程序的响应速度。 单线程是按顺序执行的,比如用单线程执行如下操作: 6秒读取文件1 9秒处理文件1 5秒读取文件2 8秒处理文件2 总共用时 28 秒,如果开启两条线程来执行上面的操作(假设处理器为多核 CPU),如下所示: 6秒读取文件1 + 5秒读取文件2 9秒处理文件1 + 8秒处理文件2 只需 15 秒就可完成。 1 线程与进程 1.1 简介 说到线程就不得不提与之相关的另一概念:进程,那么什么是进程?与线程有什么关系呢?简单来说一个
python多线程学了多久_Python多线程一学就会!
Python中使用线程有两种方式:函数或者用类来包装线程对象。函数式:调用thread模块中的start_new_thread()函数来产生新线程。语法如下:thread.start_new_thread ( function, args[, kwargs] )参数说明:function - 线程函数。args - 传递给线程函数的参数,他必须是个tuple类型。kwargs - 可选参数。实例:...
python多线程学了多久_python多线程
GILglobal interpreter lock(cpython)同一时刻只有一个线程运行在一个cpu上执行字节码(无法将多个线程映射到多个cpu上)import disdef add(a):a = a + 1return aprint(dis.dis(add))GIL在某些情况下会释放每次的结果都不一样 线程之间的安全问题GIL会根据执行的直接码行数或者时间片释放GIL遇到IO操作时主动释放...
python多线程学了多久_python多线程学习(一)
python多线程、多进程 初探原先刚学Java的时候,多线程也学了几天,后来一直没用到。然后接触python的多线程的时候,貌似看到一句”python多线程很鸡肋“,于是乎直接跳过了多线程的学习。接触爬虫,才开始用到多进程这个东西。既然用到了,就系统地学吧。先来python的,再总结一下Java的。什么是线程和进程很经典的一个解释是“进程是资源分配的最小单位,线程是CPU调度的最小单位“。比如我...
这样学 Python 多线程与进程(一)
点击上方“AirPython”,选择“置顶公众号”第一时间获取 Python 技术干货!阅读文本大概需要 5 分钟。众所周知,Python 中的多线程是一个假的多线程,对于多核 CPU,...
python多线程学了多久_python 多线程学习六 一文了解多线程
0x00 三个函数1、start()该模块,顾名思义就是开始的意思,就是开启线程。2、join()join阻塞调用它的线程,直到等待被调用的线程运行结束,其实就变成了单线程。参数timeout的作用是,当前线程等待被调用的子线程的时间,如果时间到了,不管子线程是否结束,当前线程都进入就绪状态,重新等待CPU调度。3、setDaemon()当我们使用setDaemon(True)方法,设置子线程为守...
我要悄悄学python之多线程
线程 线程与进程类似,只不过它们是在同一个进程下执行的,并共享相同的上下文。 线程包括开始执行、执行顺序和结束三部分,它有一个指令指针,用于记录当前运行的上下文。它们可以被抢占(中断)、挂起(睡眠),这种做法称为—让步。 一个进程中的各个线程与主线程共享同一片数据空间,因此相对于独立的进程而言,线程的信息共享与通信更加方便。线程一般是以并发的方式执行的,因此这种并发与数据共享的机制使得多任务协作成为可能。 要注意的是在单核的CPU中,真正的并发是不可能实现的。在一个进程中线程的执行是这样规划的:每个线程执行
5885



被折叠的 条评论
为什么被折叠?



