当前位置: 首页 > news >正文

Python基础之threading多线程同时运行程序

threading多线程同时运行程序

目录

  • threading多线程同时运行程序
    • 1 threading
      • 1.1 概念
      • 1.2 主要组件
      • 1.3 注意事项
      • 1.4 基本语法
    • 2 代码测试
      • 2.1 分别开启线程
      • 2.2 线程连续启动

1 threading


1.1 概念

Python 的 threading 库用于实现多线程编程,允许程序在同一时间执行多个任务。threading 库提供了丰富的多线程编程工具,适合处理 I/O 密集型任务或需要并发执行的场景对于 CPU 密集型任务,多线程可能不会提升性能,建议使用 multiprocessing 模块,以避免 GIL(全局解释器锁)的限制。

1.2 主要组件

  • Thread 类:用于创建和管理线程。通过继承 Thread 类或直接实例化并传入目标函数来创建线程。
  • Lock 类:提供线程同步机制,防止多个线程同时访问共享资源。
  • RLock 类:可重入锁,允许同一线程多次获取锁。
  • Condition 类:用于线程间的条件同步,允许线程等待特定条件满足。
  • Semaphore 类:限制同时访问共享资源的线程数量。
  • Event 类:用于线程间的事件通知,一个线程可以等待事件,另一个线程可以触发事件。
  • Timer 类:用于在指定时间后执行函数。
  • Barrier 类:用于同步多个线程,确保它们在某个点同时继续执行。

1.3 注意事项

  • GIL(全局解释器锁): Python 的 GIL 限制了同一时间只有一个线程执行 Python 字节码,因此在 CPU 密集型任务中,多线程可能不会提升性能
  • 线程安全: 多线程编程需注意线程安全问题,避免竞争条件。
  • 调试: 多线程程序调试较为复杂,需使用适当的工具和方法。

1.4 基本语法

  • thread = threading.Thread(target=worker,args=(‘work1’,))创建线程
    • target=worker,指定线程worker,worker为def的函数名
    • args=(‘work1’,),worker函数所用到的参数,无可不写
  • thread .start()启动线程
  • thread .join()等待线程完成

2 代码测试


2.1 分别开启线程

每次线程的开启,线程和主线顺序可能都不同

代码展示:

import threading
def worker():
    print('开始')
    for i in range(5):
        print(f'正在worker:{i}')
    print('完成')
thread = threading.Thread(target=worker)
thread.start()
print('开始主线')

def worker1(n):
    print(f'{n}开始')
    for i in range(5):
        print(f'{n}正在{i}')
    print('完成')

thread1 = threading.Thread(target=worker1,args=('work1',))
thread1.start()
print('继续主线')

运行结果:
在这里插入图片描述

在这里插入图片描述

2.2 线程连续启动

可以明显看到时间的停顿,顺序不同。

代码展示:

import threading
import time
def run(n):
    print('task',n)
    time.sleep(1)
    print('2s')
    time.sleep(1)
    print('1s')
    time.sleep(1)
    print('0s')
    time.sleep(1)

def run2(t):
    time.sleep(t)
    print(f'wait {t}s')

if __name__ =='__main__':
    t1 = threading.Thread(target=run,args=('t1',))
    t2 = threading.Thread(target=run, args=('t1',))
    t1.start()
    t2.start()

    t3 = threading.Thread(target=run2, args=(5,))
    t4 = threading.Thread(target=run2, args=(8,))
    t3.start()
    time.sleep(10)
    print('开始计时')
    t4.start()

运行结果:
在这里插入图片描述
在这里插入图片描述

相关文章:

  • 开源链动2+1模式AI智能名片S2B2C商城小程序在KOC参与门店做透中的应用探索
  • 黑马程序员javaweb案例---初识管理系统(spring-boot)
  • Flutter:进度条封装
  • Python精进系列: isinstance 函数
  • 基于SpringBoot的“考研互助平台”的设计与实现(源码+数据库+文档+PPT)
  • 【Pandas】pandas Series asof
  • python可视化开源库
  • 在windows10系统上搭建npm仓库源
  • uni-app如何发布项目为app_2025
  • AI论文开题报告:分享5款写作软件
  • Linux中的基本指令(上)
  • Vue.js知识总结
  • Vue+Node.js+MySQL+Element-Plus实现一个账号注册与登录功能
  • 动态规划 -第1篇
  • 从青铜到王者:六大排序算法实战解析
  • Docker避坑实战:6大“诡异“问题深度拆解
  • 【GPT入门】第15课 用 prompt生成sql交互页面,创建可视化自然语言转sql生成器
  • PyTorch深度学习框架进阶学习计划 - 第20天:端到端图像生成系统
  • Lock接口与synchronized锁机制
  • 蓝桥杯备考:unordered_map基础用法题 ---学籍管理
  • 上海做宴会的网站/抖音seo关键词优化排名
  • 怎样做美瞳网站/开网店怎么开 新手无货源
  • 有什么做数据的网站/郑州制作网站公司
  • 域名查询备案/郑州整站网站优化
  • 行业协会网站模板/公司官网优化方案
  • 伦教网站开发/湖南seo优化价格