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

简介: python多线程threading库

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

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

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

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

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

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

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()

效果
image.png

目录
相关文章
|
2月前
|
存储 缓存 Java
什么是线程池?从底层源码入手,深度解析线程池的工作原理
本文从底层源码入手,深度解析ThreadPoolExecutor底层源码,包括其核心字段、内部类和重要方法,另外对Executors工具类下的四种自带线程池源码进行解释。 阅读本文后,可以对线程池的工作原理、七大参数、生命周期、拒绝策略等内容拥有更深入的认识。
137 29
什么是线程池?从底层源码入手,深度解析线程池的工作原理
|
1月前
|
存储 运维 API
源码解密协程队列和线程队列的实现原理(一)
源码解密协程队列和线程队列的实现原理(一)
35 1
|
1月前
|
存储 安全 API
源码解密协程队列和线程队列的实现原理(二)
源码解密协程队列和线程队列的实现原理(二)
33 1
|
3月前
|
数据采集 Java Python
Python并发编程:多线程(threading模块)
Python是一门强大的编程语言,提供了多种并发编程方式,其中多线程是非常重要的一种。本文将详细介绍Python的threading模块,包括其基本用法、线程同步、线程池等,最后附上一个综合详细的例子并输出运行结果。
|
3月前
|
数据采集 Java Python
Python并发编程:多线程(threading模块)
本文详细介绍了Python的threading模块,包括线程的创建、线程同步、线程池的使用,并通过多个示例展示了如何在实际项目中应用这些技术。通过学习这些内容,您应该能够熟练掌握Python中的多线程编程,提高编写并发程序的能力。 多线程编程可以显著提高程序的并发性能,但也带来了新的挑战和问题。在使用多线程时,需要注意避免死锁、限制共享资源的访问,并尽量使用线程池来管理和控制线程。
|
3月前
|
算法 安全 Java
深入解析Java多线程:源码级别的分析与实践
深入解析Java多线程:源码级别的分析与实践
|
4月前
|
数据处理 调度 Python
Python并发编程实战指南:深入理解线程(threading)与进程(multiprocessing)的奥秘,打造高效并发应用!
【7月更文挑战第8天】Python并发编程探索:使用`threading`模块创建线程处理任务,虽受限于GIL,适合I/O密集型工作。而`multiprocessing`模块通过进程实现多核利用,适用于CPU密集型任务。通过实例展示了线程和进程的创建与同步,强调了根据任务类型选择合适并发模型的重要性。
59 5
|
4月前
|
数据库 数据安全/隐私保护 C++
Python并发编程实战:线程(threading)VS进程(multiprocessing),谁才是并发之王?
【7月更文挑战第10天】Python并发对比:线程轻量级,适合I/O密集型任务,但受GIL限制;进程绕过GIL,擅CPU密集型,但通信成本高。选择取决于应用场景,线程利于数据共享,进程利于多核利用。并发无“王者”,灵活运用方为上策。
54 2
|
5月前
|
缓存 并行计算 Java
重温JAVA线程池精髓:Executor、ExecutorService及Executors的源码剖析与应用指南
重温JAVA线程池精髓:Executor、ExecutorService及Executors的源码剖析与应用指南
|
4月前
|
API 数据库 C++
震惊!Python并发编程大揭秘:线程(threading)VS进程(multiprocessing),你选对了吗?
【7月更文挑战第8天】在Python并发编程中,线程适合I/O密集型任务,如实时订单处理,而进程适合CPU密集型任务,如商品信息同步。线程利用轻量级并发,处理I/O等待时切换成本低;进程通过multiprocessing模块充分利用多核CPU。根据任务类型选择合适工具,能提升效率并优化系统性能。理解和运用线程与进程,是解决并发问题的关键。
38 0