网站首页 > 技术文章 正文
前面文章我们讲述了多进程,这章我们学习下多线程相关知识。
python中有两个线程相关的标准库,一个是_thread,另一个是threading。
_thread提供了一些线程操作相关的原语,实现为Python的内置模块,是用C语言实现的。
threading是在_thread上封装了一层,实现为python的一个模块,它更易于使用,以下例子我们使用它来讲述。
在python中使用多线程时,有一点我们要注意,就是python的全局解释器锁即GIL,由于它的存在使得同一个进程内的多个线程不能同时执行python代码,也就是说python的多线程并不能利用多核,任一时刻只能有一个线程运行python代码,GIL的限制只针对Python代码,如果你有用C语言实现的模块可以不受此限制。
既然有GIL的限制为什么我们还要用多线程呢?因为用它可以实现一些无阻塞的场景,比如GUI编程中,主线程负责界面的渲染工作,其它线程可以做耗时的任务,这样界面就不会卡住仍然可以响应我们的操作。
下面我们让我们实现这样一个需求:创建10个线程并为每个新线程分配一个唯一标识,然后执行新线程,每个线程打印出自己的标识。
一、定义打印标识的函数
我们可以认为这个标识线程会当参数传给我们,所以代码可以实现如下:
def print_id(tid):
print(f"my id is {tid}")
二、创建线程
先导入threading模块,然后实例化threading.Thread这个类就会创建一个线程,创建线程时 需要传入target和args参数。target参数是一个可调用对象,线程启动时会调用target,这里我们传入print_id。args参数会在新线程调用target时传入,这里我们传入线程的标识id,如下代码:
threading.Thread(target=print_id, args=(tid,))
三、启动线程
创建线程对象后,我们只需要调用start方法就能启动线程了,比如对象是thread,这样调用就启动线程了:
thread.start()
四、整合程序
把上面的逻辑整合在一块,创建10个线程,然后启动并等待线程结束,如下是完整代码:
import threading
def print_id(tid):
print(f"my id is {tid}")
thread_list = [threading.Thread(target=print_id, args=(tid,)) for tid in range(10)]
for thread in thread_list: thread.start()
for thread in thread_list: thread.join()
运行后输出如下:
my id is 0
my id is 1
my id is 2
my id is 3
my id is 4
my id is 5
my id is 6
my id is 7
my id is 8
my id is 9
是不是很简单,你学会了吗?当然threading模块有很多内容这里没有讲,如果全讲的话篇幅会非常大,想了解的的话还需要你自己找下资料看看。
猜你喜欢
- 2024-12-18 接口测试系列文章3——Python接口测试其实只需三步
- 2024-12-18 Python列表详解 python中列表的方法
- 2024-12-18 Python3+pygame实现的90坦克大战代码有演示效果
- 2024-12-18 python并发编程一:多进程 python 多进程原理
- 2024-12-18 小白都看懂了,Python 中的线程和进程精讲,建议收藏
- 2024-12-18 pandas每天一题-题目1、2、3 pandas选择题题库
- 2024-12-18 二分查找法-Python学习 二分查找算法流程图
- 2024-12-18 Python3.8+Django+nginx+uwsgi环境(二)
- 2024-12-18 一篇文章带你使用Python搞定对Excel表的读写和处理
- 2024-12-18 py2exe实现python文件打包为.exe可执行程序(上篇)
- 277℃Python短文,Python中的嵌套条件语句(六)
- 277℃python笔记:for循环嵌套。end=""的作用,图形打印
- 274℃PythonNet:实现Python与.Net代码相互调用!
- 269℃Python实现字符串小写转大写并写入文件
- 268℃Python操作Sqlserver数据库(多库同时异步执行:增删改查)
- 127℃原来2025是完美的平方年,一起探索六种平方的算吧
- 112℃Ollama v0.4.5-v0.4.7 更新集合:Ollama Python 库改进、新模型支持
- 108℃Python 和 JavaScript 终于联姻了!PythonMonkey 要火?
- 最近发表
-
- 假期苦短,我用Python!这有个自动回复拜年信息的小程序
- 第4天|16天搞定Python数据分析,图表,靓靓靓
- 60带源代码的Python项目之 08 使用 Python 生成 QR 码
- 用python3 实现生成二维码代码示例
- python批量生成二维码图片(python如何生成二维码)
- 使用python生成二维码(python生成二维码界面)
- Python制作二维码(python制作二维码小作业)
- Python 生成条形码、二维码 (Code 128、EAN-13、QR code等)
- python如何实现二维码的生成和识别
- Python 使用 JsonPath 完成接口自动化测试中参数关联和数据验证
- 标签列表
-
- python中类 (31)
- python 迭代 (34)
- python 小写 (35)
- python怎么输出 (33)
- python 日志 (35)
- python语音 (31)
- python 工程师 (34)
- python3 安装 (31)
- python音乐 (31)
- 安卓 python (32)
- python 小游戏 (32)
- python 安卓 (31)
- python聚类 (34)
- python向量 (31)
- python大全 (31)
- python次方 (33)
- python桌面 (32)
- python总结 (34)
- python浏览器 (32)
- python 请求 (32)
- python 前端 (32)
- python验证码 (33)
- python 题目 (32)
- python 文件写 (33)
- python中的用法 (32)