前言
主要内容:
小目标:掌握多线程;
主要内容:线程类使用,多线程使用;
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官方认证二维码输入“领取资料” 即可领取