python多线程详解

前言

主要内容:
小目标:掌握多线程;
主要内容:线程类使用,多线程使用;

1. 线程基本概念

线程概念:
线程是轻量级进程,是操作系统能够进行运算调度的最小单位;

线程依赖进程资源,是进程中的实际运作单位;

一个进程中可以包含多个线程,多线程可以实现并发;

多线程资源共享;

为什么使用多线程:
线程创建,销毁占用的系统开销比进程小,效率高;

多线程可以共享进程中的全局资源,通信简单;

2. 多线程使用:

Pythoh中使用threading模块对线程进行操作;

2.1 线程相关方法:
创建线程相关方法
方法说明:

在这里插入图片描述

2.2 一个例子:
创建线程:

import threading
import time

g_value = 0

def func(*args, **kwargs):
    #线程函数
    global g_value
    print('in func args:', args, kwargs)
    print('in func thread id:', threading.get_ident())
    time.sleep(1)
    #修改全局变量
    g_value = 1

if __name__ == '__main__':
    print('main thread id:', threading.get_ident())
    print("g_value:", g_value)
    #创建线程对象,指定线程函数, kwargs中key必须是字符串
    t1 = threading.Thread(target=func, args=("n1",), kwargs={'leve':1})
    #创建线程,并执行线程函数
    t1.start()
    #获取当前进程中活跃线程数量
    print("active thread:", threading.active_count())
    #等待线程结束
    t1.join()
    print("g_value:", g_value)

结果:子线程可以直接对全局变量修改

main thread id: 17328
g_value: 0
in func args: ('n1',) {'leve': 1}
active thread: 2
in func thread id: 9532
g_value: 1

3. 线程间通信:消息队列

主要方式:

通过变量,直接读写;通过消息队列;

消息队列:

from queue import Queue
Queue与多进程中的类似,主要方法:

方法说明:

在这里插入图片描述
一个例子:

import threading
from queue import Queue
#消息队列
msgq = Queue()

def recvmsg(*args, **kwargs):
    #线程函数,接受消息
    while True:
        msg = msgq.get()
        print('rev msg:', msg)
        if msg == 'q':
            break

def sendmsg():
    #发送消息
    while True:
        msg = input('enter:')
        msgq.put(msg)
        if msg == 'q':
            break

if __name__ == '__main__':
    #创建线程
    t1 = threading.Thread(target=recvmsg)
    t1.start()
    sendmsg()
    t1.join()

结果:

enter:1
rev msg: 1
enter:2
rev msg: 2
enter:3
rev msg: 3
enter:q
rev msg: q

5 多线程中同步

多线程中同步机制与多进程中类似:

from threading import Lock, RLock, Semaphore

详情与使用方式请参考:

python编程_互斥锁与信号量

6. python中多线程限制:

Python中多线程限制:

因为Python解释器中GIL限制,在多核CPU上,同一时刻只能运行单个线程;

所以Python中的多线程相对于C,C++,Java中的多线程是伪多线程。

GIL锁:

GIL锁全称:Global Interpreter Lock(全局解释器锁);

python设计之初的考虑,为了数据安全所做的决定。某个线程想要执行,必须先拿到GIL;

在一个python进程中GIL锁只有一个,获取不到GIL锁的线程不能被执行;

python中多线程执行过程:

Python程序被Python解释转译成字节码;

python解释器执行线程,首先获取GIL锁;

线程执行一定时间或者遇到资源等待,释放GIL锁;

python解释器去执行其他线程;

5. 并发编程总结:

并发编程实现:多进程或者多线程;

在IO阻塞情况下,使用并发模式,能够提高程序执行效率;

在需要大量计算情况下,并发模式提高效率可能并不明显;

多核CPU,需要并发进行计算,推荐使用多继承;

读者福利:知道你对Python感兴趣,还准备了这套python学习资料

对于0基础小白入门:

如果你是零基础小白,想快速入门Python是可以考虑的。

一方面是学习时间相对较短,学习内容更全面更集中。
二方面是可以找到适合自己的学习方案

包括:Python永久使用安装包、Python web开发,Python爬虫,Python数据分析,人工智能、机器学习等学习教程。带你从零基础系统性的学好Python!

零基础Python学习资源介绍

👉Python学习路线汇总👈

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。(全套教程文末领取哈)

👉Python必备开发工具👈

温馨提示:篇幅有限,已打包文件夹,获取方式在:文末

👉Python学习视频600合集👈

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

👉实战案例👈

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

在这里插入图片描述

👉100道Python练习题👈

检查学习结果。

👉面试刷题👈



在这里插入图片描述

资料领取

上述这份完整版的Python全套学习资料已经上传CSDN官方,朋友们如果需要可以微信扫描下方CSDN官方认证二维码输入“领取资料” 即可领取

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值