python多线程学

Python学习笔记--多线程编程 线程有着不同的状态,也有不同的类型。简单了解完这些之后,我们开始看看具体的代码使用了。 阅读详情
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} 秒")

WSL2网络配置全攻略:如何让Windows和Linux子系统互相访问端口(附防火墙设置) 本文深入解析WSL2的网络架构,并提供详细的端口互通配置指南。针对WSL2与Windows宿主机之间常见的网络访问问题,文章从原理出发,逐步讲解如何识别网络环境、配置Windows防火墙规则、调整服务监听地址,并介绍镜像网络模式等进阶优化方案,最终实现稳定可靠的双向端口访问。 阅读详情

相关推荐

以LAN8720A为例的以太网硬件设计方案

输入时钟(XTAL1/CLKIN,XTAL2):推荐外加25MHz(性价比较高)晶振为PHY芯片提供时钟,PHY芯片内部PLL将其倍频为50MHz来使用,亦可使用直接使用50MHz晶振。三位MODE通过高低电平组合分别对应以上8种模式 ,包含10M半双工,10M全双工,100M半双工,100M全双工,是否启用自协商协议,CRS是否有效等。VDDCR:1.2V电源,可由芯片内部稳压电源提供,亦可由外部电源提供,由外部电源提供可降低芯片功耗。REF_CLK:参考时钟,由MAC或外部时钟晶振向PHY芯片提供。

weixin_46154042的博客 5885

Python学习系列之多线程

一、多线程定义       进程是由若干线程组成的,一个进程至少有一个线程,叫主线程。 多线程类似于同时执行多个不同程序,多线程运行有如下优点: 使用线程可以把占据长时间的程序中的任务放到后台去处理,不会出现界面卡顿的情况。 用户界面更加友好,这样比如用户点击了一个按钮去触发某些事件的处理,可以弹出一个进度条来显示处理的进度。 程序的运行速度可能加快。 在一些等待的任务实现上如用户输入、...

answer3lin的博客 1万+

欢乐熊大话蓝牙知识16:蓝牙是怎么找设备的?扫描与广播的“对话内幕”

蓝牙是怎么找设备的?扫描与广播的对话技术介绍

hoony123的博客 1382

一文吃透python多线程(全面总结)

python多线程,包含创建、线程锁、线程通信、线程池等讲解

qq_43745578的博客 2万+

RH850从0搭建Autosar开发环境【7】- Davinci Configurator之CanTp模块配置详解(上)

RH850从0搭建Autosar开发环境【7】- Davinci Configurator之CanTp模块配置详解(上)

weixin_42412049的博客 2300

北斗导航:提高RTK定位精度的GIS应用

其中,RTK(Real-Time Kinematic)定位技术是一种实时差分定位技术,通过利用基准站的观测数据来对移动站的测量值进行差分处理,以提高定位精度。差分处理的关键是基准站的观测数据,基准站通过全球定位系统(如北斗导航系统)获取卫星信号并记录观测数据。通过使用RTK定位技术,结合北斗导航系统的观测数据和差分处理,可以实现高精度的定位结果。我们将介绍RTK定位的原理、使用北斗导航系统进行RTK定位的步骤,以及如何将定位结果与GIS数据进行集成和可视化展示。步骤1:设置基准站和移动站。

OvzStream的博客 476

python学习——多线程

【代码】python学习——多线程。

叶子的博客 1365

ATE Pin Electronics电路学习总结

PinElectronics(PE)是ATE测试机的核心模拟前端电路,负责ATE与芯片间的信号转换与交互。主要包含四大功能模块:Driver实现逻辑信号到模拟电平的转换(VIH/VIL可编程);Receiver对DUT输出进行采样比较(VOH/VOL判定);ActiveLoad施加可编程电流负载;PPMU进行精密电压/电流测量。PE的性能直接影响功能测试和直流参数测试的精度,需定期校准维护。关键参数包括:Driver电压精度(±5mV)、Receiver比较精度(±10-50mV)、PPMU测量精度(±1-

歌颂苦难的行为是无耻的; 468

Python教程:一文掌握Python多线程(很详细)

多线程是指在同一进程内同时运行多个线程,每个线程执行不同的任务,实现并发执行。每个线程都有自己的执行路径,可以独立运行和调度,共享进程的资源。

旦莫的博客 3万+

【深度学习新浪潮】什么是system 1和system 2?

System 1(快速生成)指大模型直接基于输入生成响应,无需显式中间推理步骤。例如,GPT-4等模型在默认状态下通过Transformer直接输出结果,擅长快速回答简单问题或生成连贯文本,但在复杂逻辑任务中可能出错。这类模型的内部计算以向量形式隐式进行,难以处理符号推理等需要离散决策的任务。System 2(慢速推理)指模型通过生成中间token(如思维链、分步推导)或多次调用LLM进行复杂推理。

专注:太空算力、AI infra、异构调度、大模型成本工程 931

YOLOv11魔改高效涨点 | 注意力篇 | SimAM注意力:基于神经科学的 3D 注意力机制,三维权重的暴力美学,无参数也能暴力涨点?代码极简,彻底疯狂!!!

在本文中,我们为卷积神经网络(ConvNets)提出了一个概念简单但非常有效的注意力模块。与现有的通道注意力(Channel-wise)和空间注意力(Spatial-wise)模块不同,我们的模块在不向原始网络添加参数的情况下,推断出层中特征图的 3D 注意力权重。具体来说,我们基于一些知名的神经科学理论,提出优化一个能量函数来寻找每个神经元的重要性。我们进一步推导出了该能量函数的快速闭式解,并表明该解可以用不到十行代码实现。

猫天意的博客 248

再学Python——多线程

进程 是程序的一次执行。每个进程都有自己的地址空间,内存,数据线及其它记录琪运行轨迹的辅助数据 线程 所有线程运行在同一个进程当中,共享相同的运行环境。线程有开始顺序执行和结束三个部分 start_new_thread(funtion,args kwargs=None) 产生一个线程,在新的线程中用指定的参数和可选的kwargs来调用这个函数。 注意:使用这个方法时,一定要加time.sleep(),否则线程可能不执行 import thread import time def func1():

Zlirving_的博客 412

DTI-ALPS处理笔记

前段时间刚好学习了一下DTI-ALPS处理(diffusion tensor image analysis along the perivascular space ),记录一下,以便后续学习。ALPS是2017年发表在《Japanese Journal of Radiology》的一篇文章首次提出的 (),主要用于无创评估脑内淋巴系统功能的衡量数值。C图和D图中的蓝色部分是投射纤维,绿色部分是联合纤维,红色部分是皮下纤维。

weixin_52073820的博客 4792

【跟我一起学Python吧】Python 多线程

其实自我感觉Python的多线程很类似于Java的多线程机制,但是比JAVA的多线程更灵活。在早期的Python多线程实现中,采用了thread模块。例如: Python代码 fromtimeimportctime,sleep fromthreadimportstart_new_thread defloop1(): ...

aozhilu9748的博客 85

精雕软件(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...

weixin_42239175的博客 85

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

python多线程_这样学 Python 多线程与进程(一)

点击上方“AirPython”,选择“置顶公众号”第一时间获取 Python 技术干货!阅读文本大概需要 5 分钟。众所周知,Python 中的多线程是一个假的多线程,对于多核 CPU,由于受限于 GIL 全局解释锁,同一时刻只能有一个线程在运行。但是对于经常爬虫网络请求、下载图片等 IO 密集型操作,多线程变的很实用,能在一定程度上提高程序运行的效率。下面带大家从零开始学习 Pytho...

weixin_39688875的博客 76

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

python多线程学了多久_python多线程学习(一)

多线程和多进程是什么自行google补脑,廖雪峰官网也有,但是不够简洁,有点晕,所以就整个简单的范例。对于python多线程的理解,我花了很长时间,搜索的大部份文章都不够通俗易懂。所以,这里力图用简单的例子,让你对多线程有个初步的认识。单线程在好些年前的MS-DOS时代,操作系统处理问题都是单任务的,我想做听音乐和看电影两件事儿,那么一定要先排一下顺序。(好吧!我们不纠结在DOS时代是否有听音乐...

weixin_39967405的博客 182

python多线程学了多久_python程序默认执行与多线程

一、程序执行流程和进程线程简述1程序执行流程有类似脚本程序或编程经验的同学都知道,程序默认是自上而下,从左到右的按顺序执行,也叫串行执行;而多线程类似于并行执行,即A模块(函数)执行时B也执行不需要等A执行完再执行,这里请区别对待并发执行(同一时间执行);以上是简单概念性描述,2什么是线程与进程?线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进...

weixin_39793638的博客 72

从零开始学 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 简介 说到线程就不得不提与之相关的另一概念:进程,那么什么是进程?与线程有什么关系呢?简单来说一个

qq_33085579的博客 304

python多线程学了多久_Python多线程一学就会!

Python中使用线程有两种方式:函数或者用类来包装线程对象。函数式:调用thread模块中的start_new_thread()函数来产生新线程。语法如下:thread.start_new_thread ( function, args[, kwargs] )参数说明:function - 线程函数。args - 传递给线程函数的参数,他必须是个tuple类型。kwargs - 可选参数。实例:...

weixin_39872191的博客 53

python多线程学了多久_python多线程

GILglobal interpreter lock(cpython)同一时刻只有一个线程运行在一个cpu上执行字节码(无法将多个线程映射到多个cpu上)import disdef add(a):a = a + 1return aprint(dis.dis(add))GIL在某些情况下会释放每次的结果都不一样 线程之间的安全问题GIL会根据执行的直接码行数或者时间片释放GIL遇到IO操作时主动释放...

weixin_39682944的博客 58

python多线程学了多久_python多线程学习(一)

python多线程、多进程 初探原先刚学Java的时候,多线程也学了几天,后来一直没用到。然后接触python的多线程的时候,貌似看到一句”python多线程很鸡肋“,于是乎直接跳过了多线程的学习。接触爬虫,才开始用到多进程这个东西。既然用到了,就系统地学吧。先来python的,再总结一下Java的。什么是线程和进程很经典的一个解释是“进程是资源分配的最小单位,线程是CPU调度的最小单位“。比如我...

weixin_39939904的博客 133

这样学 Python 多线程与进程(一)

点击上方“AirPython”,选择“置顶公众号”第一时间获取 Python 技术干货!阅读文本大概需要 5 分钟。众所周知,Python 中的多线程是一个假的多线程,对于多核 CPU,...

python爬虫人工智能大数据 263

python多线程学了多久_python 多线程学习六 一文了解多线程

0x00 三个函数1、start()该模块,顾名思义就是开始的意思,就是开启线程。2、join()join阻塞调用它的线程,直到等待被调用的线程运行结束,其实就变成了单线程。参数timeout的作用是,当前线程等待被调用的子线程的时间,如果时间到了,不管子线程是否结束,当前线程都进入就绪状态,重新等待CPU调度。3、setDaemon()当我们使用setDaemon(True)方法,设置子线程为守...

weixin_42506884的博客 161

我要悄悄学python之多线程

线程 线程与进程类似,只不过它们是在同一个进程下执行的,并共享相同的上下文。 线程包括开始执行、执行顺序和结束三部分,它有一个指令指针,用于记录当前运行的上下文。它们可以被抢占(中断)、挂起(睡眠),这种做法称为—让步。 一个进程中的各个线程与主线程共享同一片数据空间,因此相对于独立的进程而言,线程的信息共享与通信更加方便。线程一般是以并发的方式执行的,因此这种并发与数据共享的机制使得多任务协作成为可能。 要注意的是在单核的CPU中,真正的并发是不可能实现的。在一个进程中线程的执行是这样规划的:每个线程执行

weixin_42577686的博客 169
上一篇: python协程学习
下一篇: csv2geojson
groundnut888
博客等级 码龄6年 59粉丝 27原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值