Python 之 多线程编程学习笔记

Python进阶学习笔记之——多线程编程 多线程编程 1、Python 的多线程支持模块简介 Python 提供了多个模块来支持多线程编程,包括 thread、threading 和 Queue 模块等。程序是可以使用 thread 和 threading 模块来创建与管理线程。thread 模块提供了基本的线程和锁定支持;而 threading 模块提供了更高级别、功能更全面的线程管理。使用 Queue 模块,用户可以创建一支队列数据结构,用于在多线程之间进行共享。 核心提示:避免使用 thread 模块 推荐使用更高级别的 threadin 阅读详情

Python之多线程编程学习笔记 

在一个程序中,这些独立运行的程序片断叫作“线程”(Thread),利用它编程的概念就叫作“多线程处理”。多线程处理一个常见的例子就是用户界面。利用线程,用户可按下一个按钮,然后程序会立即作出响应,而不是让用户等待程序完成了当前任务以后才开始响应。

这里整理一下Python程序设计中使用多线程的几种方法。

1. 使用Thread模块相关的函数实现多线程

先写两个函数,work_one ,work_two,我希望把这两个函数同时执行。

使用Thread模块的代码如下:

import thread
from time import sleep
def work_one():
    print 'John starts to work!\n'
    sleep(4)    #模拟工作过程
    print 'John done his work!\n'

def work_two():
    print 'Billy starts to work!\n'
    sleep(6)    #模拟工作过程
    print 'Billy done his work!\n'
def main():
    print '***** main *****\n'
    thread.start_new_thread(work_one,())
    thread.start_new_thread(work_two,())
    sleep(8)
    print '***** all work done! *****\n'
if __name__ == '__main__':
main()

效果图如下:

       

        main中的sleep(8)是为了防止主线程提前终止,从而杀死运行着的两个线程。这就好比是限时赛跑,不管有没有人到达终点,限时一到,比赛结束。

        如果希望主线程等所有线程执行完毕后,才终止,如常规的赛跑比赛。我们可以加上为每个线程,加上一把线程锁。

import thread
from time import sleep
def work_one(lock):
    print 'John starts to work!\n'
    sleep(4)    #模拟工作过程
    print 'John done his work!\n'
    print 'lock1 release!'
    lock.release()
   
    
def work_two(lock):
    print 'Billy starts to work!\n'
    sleep(6)    #模拟工作过程
    print 'Billy done his work!\n'
    print 'lock2 release!'
    lock.release()                 #完成工作,打开锁
    
    
def main():
    print '***** main *****\n'
    
    lock1=thread.allocate_lock()   #申请一个线程锁
    lock2=thread.allocate_lock()

    lock1.acquire()                #把每个线程锁锁上
    lock2.acquire()

    
    thread.start_new_thread(work_one,(lock1,))
    thread.start_new_thread(work_two,(lock2,))

    while lock1.locked():          #检查锁是否打开
        pass
    while lock2.locked():
        pass
    print '***** all work done! *****\n'
if __name__ == '__main__':
    main()

效果图如下:


2.创建threading模块中的Thread类实现多线程

        这个模块是高层模块,使用起来相对于thread模块更方便一些。

        先实例化一个Thread对象,传入work_one和work_two函数,在调用start方法,启动线程。最后用join方法,等待线程退出。

import threading
from time import sleep
def work_one():
    print 'John starts to work!\n'
    sleep(4)    #模拟工作过程
    print 'John done his work!\n'
   
    
def work_two():
    print 'Billy starts to work!\n'
    sleep(6)    #模拟工作过程
    print 'Billy done his work!\n'              
    
def main():
    print '***** main *****\n'
    thread1=threading.Thread(target=work_one) #创建一个Thread实例
    thread2=threading.Thread(target=work_two)
    thread1.start()                           #start函数,启动线程                         
    thread2.start()
    thread1.join()                            #join函数,用于等待线程结束
    thread2.join()
    print '***** all work done! *****\n'
if __name__ == '__main__':
main()


3.继承Thread类,创建子类实例

      编写一个MyThread类,继承,并覆盖run方法。然后再调用start和join方法。


import threading
from time import sleep
class Mythread(threading.Thread):
    def __init__(self,time,name):
        threading.Thread.__init__(self)
        self.time=time
        self.name=name
    def run(self):
        sleep(self.time)    #模拟工作过程
        
def main():
    print '***** main *****'
    thread1=Mythread(4,'John') #创建一个Thread实例
    thread2=Mythread(6,'Billy')
    print thread1.name,'starts to work!'
    thread1.start()                           #start函数,启动线程
    print thread2.name,'starts to work!'
    thread2.start()
    thread1.join()                            #join函数,用于等待线程结束
    print thread1.name,'done his work!'
    thread2.join()
    print thread2.name,'done his work!'
    print '***** all work done! *****\n'
if __name__ == '__main__':
main()

效果图如下:




Python 进阶学习笔记之六:多线程编程 基于 Python3 threading 的多线程编程实现,涉及 threading 模块中 Lock、RLock、Condition、Semaphore、Event、Barrier的实际应用代码示例 阅读详情

相关推荐

Python多线程编程学习笔记

我们学习了如何创建线程、线程同步、线程间通信以及使用线程池。通过合理地使用线程同步机制和线程间通信,我们可以编写出高效且安全的多线程程序。多线程是一种并发编程的方式,通过创建多个线程来同时执行任务,从而提高程序的执行效率。Python提供了多种线程间通信的机制,如使用队列、事件、条件变量等。要创建一个线程,我们需要定义一个函数,并使用threading.Thread类来创建一个线程对象。首先,我们需要导入Python的threading模块,该模块提供了多线程编程所需的功能。

CyberBladeX的博客 69

python多线程编程_Python Web学习笔记之多线程编程

本次给大家介绍Python的多线程编程,标题如下:Python多线程简介Python多线程之threading模块Python多线程之Lock线程锁Python多线程之Python的GIL锁Python多线程之ThreadLocal多进程与多线程比较多进程与多线程比较之执行特点多进程与多线程比较之切换多进程与多线程比较之计算密集型和IO密集型Python多线程简介一个进程由若干个线程组成,在Pyt...

weixin_39827728的博客 158

Python学习笔记--多线程编程

线程有着不同的状态,也有不同的类型。简单了解完这些之后,我们开始看看具体的代码使用了。

热情、奔放、快乐编程! 318

Python学习笔记-多线程编程

Python 实现多线程编程需要借助于 threading 模块,而threading模块中最核心的内容是Thread这个类。我们要创建Thread对象,然后让它们运行,每个Thread对象代表一个线程,在每个线程中,我们可以让程序处理不同的任务,这就是多线程编程。 创建Thread对象有两种手段: 1.直接创建Thread对象 class threading.Thread(group=None, target=None, name=None, args=(), kwargs={}, *, daemon=N

编程使我快乐 316

vivado运行时报错 license文件更新操作

vivado使用:SYNTHESIS->Run Synthesis 时报错 [Common 17-345] A valid license was not found for feature ‘Synthesis’ and/or device ‘xc7vx485t’. Please run the Vivado License Manager for assistance in determiningwhich features and devices are licensed for your sy

qq_44692266的博客 2万+

PRPD图谱分析从入门到精通:5种典型放电模式的识别手册

本文详细解析PRPD图谱分析技术,重点介绍电晕放电、悬浮放电等5种典型放电模式的识别方法。通过37组真实案例对比,提供关键识别区和诊断流程图模板,帮助工程师快速掌握变电站设备状态监测的核心技能,提升绝缘缺陷诊断准确率。

weixin_29214199的博客 466

精通Python——多线程编程学习笔记

在 Python 中,你可以启动一个线程,但却无法停止它。 1 介绍 在多线程(multithreaded,MT)编程出现之前,计算机程序的执行是由单个步骤序列组成的,该序列在主机的 CPU 中按照同步顺序执行。让这些独立的任务同时运行,就是多线程编程。多线程本质上是异步的。 使用多线程编程,以及类似 Queue 的共享数据结构,这个编程任务可以规划成几个执行特定函数的线程: •UserRequestThread:负责读取客户端输入,该输入可能来自 I/O 通道。程序将创建多个线程,...

xlsj雪松的博客 419

千兆以太网 PCB 设计实战:4层板 100Ω 差分对布线,EMI 降低 6dB 实测

本文详细解析了千兆以太网 PCB 设计中的关键技术与实战经验,重点介绍了4层板上100Ω差分对的优化布线方法,通过实测数据展示了EMI降低6dB的有效方案。内容涵盖层叠设计、阻抗计算、布线技巧及EMI抑制措施,为硬件工程师提供了一套完整的高速电路设计解决方案。

weixin_29175469的博客 424

Python Web学习笔记之多线程编程

本次给大家介绍Python的多线程编程,标题如下: Python多线程简介 Python多线程之threading模块 Python多线程之Lock线程锁 Python多线程之Python的GIL锁 Python多线程之ThreadLocal 多进程与多线程比较 多进程与多线程比较之执行特点 多进程与多线程比较之切换 多进程与多线程比较之计算密集型和IO密集型 ...

dengxiangbao3167的博客 247

利用Matlab实现矩形波导电磁场分布图的绘制

1.利用Matlab实现矩形波导电磁场分布图的绘制;2.学会使用 Matlab 进行数值计算,并绘出相应的图形;通过Matlab 计算并绘出任意时刻金属矩形波导的主模 TE10 模的电磁场分布图。波导尺寸、工作频率及时刻均由外部给定。(1)矩形波导中传输的主模为TE10模。设金属波导尺寸为a*b,TE10模的截止波长为2*a。其电磁场分量可推导表示如下:.......1-1上式中各参量如下:......1-2。

qq_26335381的博客 3058

cesium vue2/vue3教程目录导航

以下是本专栏目录导航,送完整项目源码(拒绝单页源码),可以直接运行,全部配置免费视频教程(B站)。

qq_29384639的博客 4314

python高级学习笔记—— 多线程编程

下面是三个线程并发执行将一个变量累加. 运行环境: mac 8核16G python 3.7.7 import time import threading tag = 0 def task1(): print('任务1开始') global tag for i in range(1000000): tag +=1 # print(tag) time.sleep(1) print('任务1结束') def task2():

u011034683的博客 277

海康Visionmaster-通讯管理:ModBus 通信发送非整型 数据的方法

海康Visionmaster-通讯管理:ModBus 通信发送非整型 数据的方法

视觉人机器视觉的博客 1741

python学习笔记——多线程编程

python学习笔记——多线程编程       基础不必多讲,还是直接进入python。     Python代码代码的执行由python虚拟机(也叫解释器主循环)来控制。Python在设计之初就考虑到要在主循环中,同时只有一个线程在执行,就像单CPU的系统中运行多个进程那样,内存中可以存放多个程序,但任意时候,只有一个程序在CPU中运行。同样,虽然python解释器可以“运

luoye7422的专栏 424

【中项】案例分析 | 答题技巧 | 备考 

对偏差原因的分析和对项目未来趋势的理解。如果偏差是由一次性事件或特殊原因引起的,那么这种偏差是非典型的,意味着未来的绩效将回归到预期的绩效水平。例如,如果项目初期的CPI小于1,原因是意外的自然灾害导致成本增加,那么这种偏差被认为是非典型的,因为它不太可能在未来重复发生。例如,如果项目初期的CPI小于1,且原因是低效的团队协作,那么这种偏差被认为是典型的,因为它可能在整个项目生命周期中持续存在。在实际应用中,项目经理通常会结合CPI、SPI和偏差趋势图等工具,综合分析偏差的性质,以制定合理的项目控制策略。

静谧、淡雅 1243

LPDDR6 tdbR2dbR_L cross row技术探讨

LPDDR6 tdbR2dbR_L cross row技术探讨

zilan23的博客 47

python3多线程编程_Python 3多线程编程学习笔记-基础篇

本文是学习《Python核心编程》的学习笔记,介绍了Python中的全局解释器锁和常用的两个线程模块:thread, threading,并对比他们的优缺点和给出简单的列子。全局解释器锁(GIL)Python代码的执行都是有Python虚拟机进行控制的。当初设计Python的时候,考虑在主循环中只能有一个控制线程在执行,就像单核CPU进行多线程编程一样。怎么做到这样控制的呢?就是这里的GIL来控制...

weixin_39647787的博客 151

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Python学习笔记18:Python多线程编程

1、引言/动机 多线程(MT)并行运行相互独立的子任务,提升整个任务的效率。 多线程适合的任务的特点:它们本质上是异步的,需要有多个并发事务,各个事务的运行顺序可以是不确定的,随机的,不可预测的。运算密集型的任务一般较容易分隔成多个子任务。2、进程和线程 进程有自己的地址空间、内存、数据栈及其他记录运行轨迹的辅助数据。 进程之间使用进程间通讯(IPC)共享信息。OS为进程公平分配时间,进程也

三五月儿的专栏 1137

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Python学习笔记--多线程编程,thread

简介:         Python提供了thread模块,threading模块与queue模块进行多线程编程。queue模块用于线程间的通信,前两者可以创建线程,不过由于thread模块偏底层,需要手动去完成很多任务,而且同步机制不如threading模块好用,所以建议选择threading模块。         threading模块中,选择Thread类来创建线程(三种方法):创建一个

Hao_Ding的专栏 1703

python学习笔记之:多线程编程

总觉得之前的网页扫描后台有点慢,今天上网学了多线程编程,记录一下 ——————————————分割线—————————————— python的多线程一般使用threading库(还有一个thread库,没用过) 用这个语句创建一个线程:import threading t = threading.Thread(target = func,args = (arg1,arg2...))t就是一个

Vccxx的博客 408

Python3多线程编程(学习笔记)

Python3多线程 多线程可以实现同时执行多个不同的程序,其具体应用有: 可将运行时间长的程序中的任务调度至后台处理; 在用户界面中,响应用户对某按钮触发事件的处理时,可以弹出进度条显示处理进度; 加快程序的运行速度; 在一些等待任务实现中,例如输入、文件读写、网络收发数据等,可以利用线程释放资源,如内存占用等。 Note:每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。...

luzhan66的博客 652

Python学习笔记——多线程编程(二)

@线程同步 #多线程中总会有一些特定的函数或代码块不希望(或不应该)被多个线程同时执行。 #当线程间共享全局变量,多个线程对该变量执行不同的操作时,该变量最终的结果可能是不确定的 #临界区:指的是一个访问共用资源的程序片段。 @锁 #有两种状态:锁定、未锁定。 #两个函数:获得锁(Lock.acquire)、释放锁(Lock.release...

笨鸟的博客 168

Python学习笔记——多线程编程(一)

@进程 #一个执行中的程序 @线程(轻量级进程) #同一个进程下执行的,并共享相同的上下文 #线程包括开始、执行顺序和结束 #线程是以并发方式执行,单核CPU系统中,实现是每个线程执行一小会儿。 @GIL(全局解释器锁) #I/O密集型的Python程序要比计算密集型的代码能够更好的利用多线程。 #多线程环境中,Pytho...

笨鸟的博客 361

【Python学习笔记】UDP编程与多线程入门(简易聊天工具编程)

UDP协议: UDP :(User Datagram Protocol):用户数据报协议 特点:面向无连接,效率高速度快,但是可靠性差 使用:适用于对效率要求相对较高而对准确性要求相对较低的场合,       例如视频在线点播、网络语音通话等等。UDP编程: 工具:与TCP相同,运用socket模块 格式:    import socket      s = socket.socket(ty...

lijiuchangxin的博客 853

Python 3多线程编程学习笔记-基础篇

本文是学习《Python核心编程》的学习笔记,介绍了Python中的全局解释器锁和常用的两个线程模块:thread, threading,并对比他们的优缺点和给出简单的列子。 全局解释器锁(GIL) Python代码的执行都是有Python虚拟机进行控制的。当初设计Python的时候,考虑在主循环中只能有一个控制线程在执行,就像单核CPU进行多线程编程...

weixin_33910759的博客 110
上一篇: BNUOJ 1095 Business Cards
下一篇: Python 之 OpenGL程序环境
plusplus7
博客等级 码龄15年 59粉丝 173原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值