Pyhon实现多线程 —— threading(含源码)

Python并发编程:多线程(threading模块) 多线程是一种并发编程方式,它允许在一个进程内同时运行多个线程,从而提高程序的运行效率。线程是轻量级的进程,拥有自己的栈空间,但共享同一个进程的内存空间。本文详细介绍了Python的threading模块,包括线程的创建、线程同步、线程池的使用,并通过多个示例展示了如何在实际项目中应用这些技术。通过学习这些内容,您应该能够熟练掌握Python中的多线程编程,提高编写并发程序的能力。多线程编程可以显著提高程序的并发性能,但也带来了新的挑战和问题。 阅读详情

 作者主页:爱笑的男孩。的博客_优快云博客-深度学习,YOLO,活动领域博主爱笑的男孩。擅长深度学习,YOLO,活动,等方面的知识,爱笑的男孩。关注算法,python,计算机视觉,图像处理,深度学习,pytorch,神经网络,opencv领域.https://blog.youkuaiyun.com/Code_and516?type=collect个人简介:打工人。

持续分享:机器学习、深度学习、python相关内容、日常BUG解决方法及Windows&Linux实践小技巧。

如发现文章有误,麻烦请指出,我会及时去纠正。有其他需要可以私信我或者发我邮箱:zhilong666@foxmail.com 

目录

threading介绍 

threading源码

效果


threading介绍 

        threading库是Python标准库中用于实现多线程编程的模块,提供了一些操作线程的方法和类,可以方便地实现多线程的并发执行。

        threading库中常用的类和方法包括:

  1. Thread类:表示一个线程,通过继承Thread类并重写run()方法可以实现自定义的线程逻辑。

  2. Lock和RLock类:用于控制多个线程对共享资源的访问,Lock类是简单的锁,RLock类是可重入的锁。

  3. Event和Condition类:用于协调多个线程的执行,Event类用于控制线程的执行状态,Condition类用于线程间的通信和协调。

  4. Timer类:用于实现线程定时任务。

  5. ThreadLocal类:用于实现线程局部变量。

        使用threading库可以方便地实现多线程编程,提高程序的并发性能和效率。同时,由于Python语言的GIL(全局解释器锁)机制,多线程程序在执行时可能存在一些潜在的问题,需要注意线程安全和共享资源的访问问题。

threading源码

import time

import threading

# threading库python自带,无需安装

# 安装time库

# pip install time -i 

# -*- coding: utf-8 -*-

import time
import threading

def video1(video):
    for i in range(0,len(video)):
        print("第" + str(i + 1) + "视频是:" + str(video[i]))
        print("当前时间:",time.strftime('%H-%M-%S', time.localtime()))
        time.sleep(4)# 设每一首歌曲的时间是4秒
        print("切换下一个视频...")

def video2(number):
    daima = 0
    while daima <= number:
        print(f"我在敲第{daima + 1}行代码")
        daima += 1
        print("当前时间:",time.strftime('%H-%M-%S', time.localtime()))
        time.sleep(2)#设每写一行代码的时间为2秒

def main():
    print("\t\t***我想看视频,还想敲代码,最好可以边看视频边敲代码***\n")
    # 我要看的视频名称
    video = ['中国机长', "速度与激情10", "生化危机"]
    number = 9
    threads = []
    # 将看的视频放到列表里面
    thing1 = threading.Thread(target=video1, args=(video,))
    threads.append(thing1)
    # 将敲代码次数也放进去
    thing2 = threading.Thread(target=video2, args=(number,))
    threads.append(thing2)
    # 开始的时间
    start = time.time()
    # 同时进行
    for thing in threads:
        # setDaemon为主线程启动了线程matter1和matter2
        thing.setDaemon(True)
        thing.start()
    # 子线程没结束前主线程会被卡在这里
    thing1.join()
    thing2.join()

    print("看完了,不看了。")
    # 结束时间
    end = time.time()
    print(f"完成时间:{end - start}")

if __name__ == '__main__':
   main()

效果

 

CANOE与python的完美结合(源码) 其中用于在客户端上建立与服务器的连接。它需要指定服务器的IP地址和端口号作为参数。连接成功后,客户端可以通过该连接与服务器进行通信。用于在服务器端绑定一个特定的IP地址和端口号。它将服务器的Socket与特定的IP地址和端口号关联起来,以便其他客户端可以连接到该地址和端口。服务器通常在启动时调用bind()函数,确保服务端Socket监听的是正确的地址和端口。需要注意的是,connect()函数只能在客户端使用,而bind()函数只能在服务器端使用。 阅读详情

相关推荐

Python中线程编程之threading模块的详细使用

通过创建和启动线程、等待线程结束、线程同步和线程间通信等示例代码,展示了如何在Python中使用threading模块进行线程编程。在上面的代码中,我们定义了一个名为print_numbers的函数,它会打印1到5的数字。在上面的代码中,我们创建了一个队列message_queue,其中一个线程作为生产者向队列中放入消息,另一个线程作为消费者从队列中获取消息并进行处理。请注意,线程编程中存在一些潜在的问题,如竞争条件、死锁等,需要注意线程安全性和合理使用线程同步机制,以避免出现意外的错误。

TechPr的博客 168

《python》—— threading库(线程和多线程)

threading 是 Python 标准库中用于实现多线程编程的模块。多线程编程允许程序同时执行多个任务,提高程序的并发性能,尤其适用于 I/O 密集型任务,例如网络请求、文件读写等。

will be blogging 2901

银河麒麟系统V10 sp1,安装wine 9.0

银河麒麟系统V10 sp1 x86_64,安装wine 9.0

daqinzl的专栏 1万+

一文搞明白Python多线程编程:threading库

本文试图搞明白Python多线程编程

闵行小鱼塘 9856

ADC学习(3)——采样电路

第三章 采样电路

夏风喃喃的博客 3万+

Rocky Linux 9 远程桌面配置全攻略:从零搭建XRDP服务(含防火墙设置)

本文提供了在Rocky Linux 9上从零开始配置XRDP远程桌面服务的完整指南。详细介绍了系统准备、XRDP服务安装、防火墙与SELinux安全设置、多用户性能优化以及多平台客户端连接实测。重点解决了使用Windows远程桌面协议(RDP)连接Rocky Linux时常见的配置难点与安全问题,帮助用户获得稳定高效的图形化远程访问体验。

vodka的博客 649

Python 基础 (标准库):threading (基于线程的并行)

Python 标准库学习:threading

AbigailQin 的博客 4571

NBIS单细胞教程:差异基因(五)

此文章是通过学习瑞典国家生物信息学基础设施(NBIS) 所开放的单细胞分析教程加上网上所查找的资料,自身的理解所形成的,可能会有不足之处。该部分是对不同集群之间的差异基因进行分析。参考来源:https://github.com/NBISweden/workshop-scRNAseq/blob/master/labs/seurat/seurat_05_dge.Rmd感兴趣的话可以阅读原文。

songyi10的博客 1万+

python多线程爬虫框架_Python多线程爬虫简单示例

python是支持多线程的,主要是通过thread和threading这两个模块来实现的。thread模块是比较底层的模块,threading模块是对thread做了一些包装的,可以更加方便的使用。虽然python的多线程受GIL限制,并不是真正的多线程,但是对于I/O密集型计算还是能明显提高效率,比如说爬虫。分别用两种方式获取10个访问速度比较慢的网页,一般方式耗时50s,多线s。序:叮咚叮咚,...

weixin_39971435的博客 528

如何用DETR(detection transformer)训练自己的数据集

DETR(detection transformer)简介 DETR是Facebook AI的研究者提出的Transformer的视觉版本,是CNN和transformer的融合,实现了端到端的预测,主要用于目标检测和全景分割。 DETR的Github地址:link

weixin_50233398的博客 3万+

23、工业物流中的多智能体路径规划与碰撞处理策略

本文探讨了工业4.0背景下工业物流中的多智能体路径规划(MAPF)与碰撞处理策略。分析了自动导引车(AGV)等移动资源的应用现状,综述了主流路径规划算法如A*、D*Lite、M*等,以及集中式与分布式碰撞检测方法。重点比较了五种碰撞避免策略:路径交叉、优先级、起始时间调整、无交叉路径和速度调整,提出了基于环境条件的策略选择流程,并通过流程图展示了评估、组合、测试与优化的全过程。文章强调应根据订单不确定性、时间约束、优先级和生产组织等因素综合选择或组合策略,以提升物流效率与系统可靠性。

mac99的博客 125

python 并发编程 多线程 定时器

定时器 就是隔多长时间去触发任务执行 指定n秒后执行某操作 Timer如何使用,看Timer源码 class Timer(Thread): """Call a function after a specified number of seconds: t = Timer(30.0, f, args=None, kwargs=Non...

weixin_30871701的博客 524

20、超声多普勒成像技术全解析

本文全面解析了超声多普勒成像技术,涵盖彩色血流成像(CFI)、能量多普勒成像、超快多普勒成像和矢量多普勒成像的原理、流程、优势及临床应用场景。详细探讨了各成像模式的特点,如CFI的血流方向与速度可视化、能量多普勒对小血管的高灵敏度、超快多普勒的高帧率分析能力,以及矢量多普勒消除角度依赖性的创新方法。同时分析了技术面临的挑战及未来发展趋势,包括更高分辨率、人工智能辅助诊断和便携式设备的发展,为医学影像研究和临床诊断提供重要参考。

z2a3b4c5d的博客 279

Python程序员必须吃透的100个函数,建议收藏!_pyhon常用函数 anki

新手在做写代码的时候容易卡壳,尤其当接触的函数以及其他知识比较多的时候,经常会看完需求之后不知道自己该用什么方法来实现它,实现的逻辑可能你有,但怎么该用什么函数给忘了,这其实就是知识的储备不够,你记不住哪个函数有什么作用,自然一头雾水。这几天我专门整理了Python常用的一些函数,从最基础的输入输出函数到正则等12个板块的,总共100多个常用函数,方便小伙伴们进行快速地记忆,每天快速过一遍,用的时候再加深一下,慢慢地你就会摆脱写代码卡壳的状况。案例:修改元组 #取元组下标在1~4之间的3个数,转换成列表。

489

如何在 SAP BTP 上使用 Integration Suite 消费 S/4HANA Cloud API

SAP Integration Suite是一个集成平台即服务(iPaaS),允许开发人员顺利地将内部部署和基于云的应用程序和流程与SAP管理的工具和预构建内容进行集成。登录 SAP Business Technology Platform Cockpit,进入 integration suite:再点击 API management 进入 API Portal:或者直接从收藏夹里打开链接:https://304a49cetrial.integrationsuitetrial-apiportal.cfapp

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1699

VC中sqlite的使用

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

【转】杰奇 jieqi 多线程自动采集同步源站 python源码

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33739646的博客 1035

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

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

【pyhon】理想论坛爬虫1.05版,将读取和写DB分离成两个文件

下午再接再厉仿照Nodejs版的理想帖子爬虫把Python版的也改造了下,但美中不足的是完成任务的线程数量似乎停滞在100个左右,让人郁闷。原因还待查。 先把代码贴出来吧,也算个阶段性成果. 爬虫代码: # 理想论坛爬虫1.05,用于爬取主贴再爬子贴,数据存到文件里,再由insertDB.py读取插DB from bs4 import BeautifulSoup import req...

weixin_34289454的博客 525

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Python+PyQt5实现滚动截屏的3个坑与优化技巧(附完整源码)

本文详细解析了使用Python和PyQt5实现滚动截屏时的三大核心问题及优化方案,包括多线程截图管道、动态边界检测算法和智能内存管理。通过实战代码示例,帮助开发者高效解决性能瓶颈、精准拼接和内存泄漏等问题,提升滚动截屏的稳定性和效率。

sky77的博客 222

异步协程下载全部图片,虽比线程慢但不会卡死,详见源码

v=b3;q=0.7',q=0.9',v="122"',0',1',masks=[]

lfsysc的博客 583

一篇文章搞定Python多进程(附教程资料及源码)

开始介绍Python的多进程之前,我们需要了解python中的GIL的存在,也就是多线程的时候,同一时间只能有一个线程在CPU上运行,而且是单个CPU上运行,不管你的CPU有多少核数。如果想要充分地使用多核CPU的资源,在python中大部分情况需要使用多进程。 1.Python多进程模块 Python中的多进程是通过multiprocessing包来实现的,和多线程的threading....

632

20190728-Python爬取视频&切割视频&视频加水印

1.视频爬取 1 1.下载视频的源码如下: 2 import os 3 import requests 4 from bs4 import BeautifulSoup 5 import threading 6 from bj.models import Video 7 8 # globals(repo_dir = './../tmp') ...

weixin_30375247的博客 419

python面试题_110道Python面试题(真题)

python面试题:110道python面试题​mp.weixin.qq.com1、一行代码实现1--100之和利用sum()函数求和2、如何在一个函数内部修改全局变量利用global在函数声明 修改全局变量3、列出5个python标准库 os:提供了不少与操作系统相关联的函数 sys: 通常用于命令行参数 re: 正则匹配 math: 数学运算 dateti...

weixin_39532699的博客 7909

Quantum 开源项目使用教程

Quantum 项目的目录结构如下: ``` quantum/ ├── docs/ │ ├── README.md │ └── ... ├── src/ │ ├── main.cpp │ ├── config.json │ └── ... ├── tests/ │ ├── test_main.cpp │ └── ... ├── .gitignore ├── LICEN

gitblog_00820的博客 398

110道Python面试题(真题)

​ 3、列出5个python标准库 os:提供了不少与操作系统相关联的函数 sys: 通常用于命令行参数 re: 正则匹配 math: 数学运算 datetime:处理日期时间 4、字典如何删除键和合并两个字典 del和update方法 5、谈下python的GIL GIL 是python的全局解释器锁,同一进程中假如有多个线程运行,一个线程在运行python程序的时候会霸占python解释器(加了一把锁即GIL),使该进程内的其他线程无法运行,等该线程运行完后其他线程才能运行。如果线

IT6666_it的博客 1645

时间轮python_Java定时任务的几种实现方案

前言最近有朋友提出希望可以介绍一下介绍下常见的定时任务的实现方案,于是便有了这篇文章。Timer本次主要讨论大家使用较多的方案,首先第一个就是 Timer 定时器,它可以在指定时间后运行或周期性运行任务;使用方法也非常简单:这样便可创建两个简单的定时任务,分别在 3s/5s 之后运行。使用起来确实很简单,但也有不少毛病,想要搞清楚它所存在的问题首先就要理解其实现原理。实现原理定时任务要想做到按照我...

weixin_39630771的博客 153

运维新手们,别再问需不需要学Python了!

经常有人在群里问,运维人员需不需要学开发?需不需要学Python?PythonN和Shell有什么区别?天天问这种好水的问题,我实在受不了,决定帮大家扫扫盲。 现阶段,掌握一门开发语言已经成为高级运维工程师的必备计能,不会开发,你就不能充分理解你们系统的业务流程,你就不能帮助调试、优化开发人开发的程序,开发人员有的时候很少关注性能的问题

混网络创始人的代码人生 1250
上一篇: 已解决windows pycocotools安装失败问题 —— 超简单
下一篇: Windows OpenVino安装squeezenet1.1失败 —— 已解决
爱笑的男孩。
博客等级 码龄5年 1499粉丝 80原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱笑的男孩。

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值