IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> python多线程 -> 正文阅读

[Python知识库]python多线程

参考博客:[https://www.bilibili.com/video/BV1fz4y1D7tU?p=9)]
黑马程序员python多线程编程

1. python多线程的介绍

多线程是python程序中实现多任务的一种方式,线程是程序执行的最小单位,同属一个进程的多个线程共享进程所拥有的全部资源。
在这里插入图片描述 在这里插入图片描述
在这里插入图片描述

2. python多线程执行多任务

用多线程执行多任务,提高程序执行的效率。
在这里插入图片描述

import time
import threading #1. 导入线程模块
def sing():
    for i in range(3):
       print("唱歌...")
       time.sleep(1)

def dance():
    for j in range(3):
        print("跳舞...")
        time.sleep(1)
if __name__=='__main__':
    sing_thread = threading.Thread(target = sing )# 创建线程

    dance_thread = threading.Thread(target = dance ) #创建线程
    sing_thread.start() # 线程启动
    dance_thread.start() # 线程启动`

3. 线程执行带有参数的任务

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

#传参的多线程

import time
import threading #1. 导入线程模块
def sing(num,name):
    for i in range(num):
       print(name,"唱歌...")
       time.sleep(1)

def dance(count):
    for j in range(count):
        print("跳舞...")
        time.sleep(1)
if __name__=='__main__':
    #args以元组的形式给执行任务传递参数,其中元组的顺序就是参数的顺序,其中注意单元素的元组的特殊形式(3,)
    sing_thread = threading.Thread(target = sing, args = (3, "xiaoming") )# 创建线程
    #kwargs以字典的形式给执行任务传递参数,其中字典的关键字和执行任务的参数名一样
    dance_thread = threading.Thread(target = dance,kwargs = {"count":2} ) #创建线程
    sing_thread.start() # 线程启动
    dance_thread.start() # 线程启动

4. 主线程和子线程的结束顺序

主线程会等待所有的子线程结束才结束。

import time
import threading
def work():
 for i in range (10):
     print("工作...")
     time.sleep(0.2)
if __name__ == '__main__':
    work_thread = threading.Thread(target = work )
    work_thread.start()
    time.sleep(1)
    print("主线程结束了")
# 主线程会等待所有的子线程执行结束再结束

运行结果:
在这里插入图片描述
这里可以看出在主线程显示已经结束时,子线程还没有结束,最后等待子线程结束才是真正的结束。因为有主线程等待所有的子线程结束再结束,所有有了守护主线程。

在这里插入图片描述

import time
import threading
def work():
 for i in range (10):
     print("工作...")
     time.sleep(0.2)
if __name__ == '__main__':
    # 主线程结束不想等待子线程结束,可以设置子线程守护主线程,有两种方法:
    #1. threading.Thread(target = work, daemon = True)
    #2. 线程对象.setdaemon = True)
    work_thread = threading.Thread(target = work , daemon = True)
    work_thread.start()
    time.sleep(1)
    print("主线程结束了")
# 主线程会等待所有的子线程执行结束再结束

执行结果:
在这里插入图片描述
这里通过对比就可以看出,主线程执行结束就立即结束了,不会再等待没有结束的子线程

5. 线程间的执行顺序

线程间虽然是先后启动的,但是是并行执行的。

import threading
import time


def task():
    time.sleep(1)
    thread  = threading.current_thread() # thread.current_thread() 方法可以返回当前线程
    print(thread )

if __name__ == '__main__':
    for i in range(5):
        task_thread = threading.Thread(target=task)
        task_thread.start()

结果:
在这里插入图片描述
可以看出先后启动的,但是是并行执行的。
存在的问题:数据的共享问题
只针对cpu?

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-10-18 17:21:19  更:2021-10-18 17:23:36 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 20:23:29-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码