1、说点儿题外话
记得刚毕业那会儿,老是喜欢研究各种其他的新的技术性的东西,可能今天还在 hadoop 的分布式明天又去准备了解 python 的机器学习。慢慢的了解过很多东西,除了 java 之外,对 scala、C#、python、shell 等都有粗浅的了解,但是真正让我写一个东西拿到生产环境或是作为一个正式的项目说实话有点难。其实,到了编程3年以后我觉得对技术的深度要比宽度更重要一些,所以,我现在主要写一些 java、python 相关的东西,其他的语言不准备碰了。
2、每天都在接触多线程
现在,很多项目中的多线程都是通过容器或是中间件来完成的。比如说,最常见的就是 web 项目容器,在 web-2.0 以来,很多项目更是从其他的地方挪到了 web 服务器,使用浏览器就可以方便的访问。在 web 容器中基本都封装了对多线程的支持,nginx 服务更是以进程为导向进行设计的,它们以用户的请求为导向使用中间件划分为多线程的请求模式。除了架构或是运维人员会注意这些,其他的开发人员面对繁重的开发任务又怎么会注意到这些呢。所以,面对这种情况在日常开发中如果不是主动研究根本不会要求你写一个多线程、高并发的需求。
3、python 中的多线程
在说明之前先回顾一下理论知识,搞清楚线程是什么以及应该注意什么。多线程:理论上能在同一个时间段执行多个程序片段,每个程序片段就看作是一个线程。为什么要说理论上,因为实际在操作系统中真正的在同一时间段基本是不存在的,但是在软件编程中我们可以理解为它是在同一时间段执行的。同步:在多个线程同时执行到一个对象节点时,同时执行会使这个对象发生冲突,因此,在一个线程执行到这里的时候另外其他的线程也要处理这个对象时则需要等待,这样称之为同步。反之,则称之为异步。通常,遇到需要同步的情况,不同的编程语言都选择通过加锁的方式来实现同步,python 亦是如此。
在 python 语言中提供了两个和多线程线程相关的模块,一个是 thread 模块、另一个是 threading 模块。相比于 threading 模块,thread 模块提供的功能和函数相对比较少,它只提供了低级别的线程和一个简单的锁用来做同步,而 threading 模块相对处理多线程的函数比较多。
4、thread 模块如何实现多线程
-
创建使用线程
1# 导入 thread 模块
2import thread
3# 创建使用新线程
4thread.start_new_thread ( func, args[, kwargs] )
5# 参数介绍
6func -- 线程要执行的函数
7args -- 传递给线程的参数,必须是元组类型
8kwargs -- 可选参数
-
线程同步
1# 导入 thread 模块
2import thread
3# 分配锁对象
4lock_ = thread.allocate_lock()
5# 获取锁对象
6lock_.acquire()
7# 释放锁对象
8lock_.release()
9# 查看锁状态
10lock_.locked()
-
实例
1# 导入 thread 模块
2import thread
3import time
4
5
6# 定义线程函数
7def time_run(thread_name, sleep_time, lock_obj):
8 print "添加锁"
9 lock_obj.acquire()
10 print "当前线程名称:", thread_name
11 print "等待时间:",sleep_time
12 time.sleep(sleep_time)
13 print "释放锁"
14 lock_obj.release()
15
16
17if __name__ == '__main__':
18 lock_ = thread.allocate_lock()
19 for i in range(3):
20 thread.start_new_thread(time_run,('thread_' + str(i),int(i) * 3,lock_))
5、threading 模块如何实现多线程
-
创建使用线程
1# 导入 threading 模块
2import threading
3import time
4# threading 模块中提供了比较强大的线程类 Thread 来实现对线程的独立管理
5# 通过继承该 Thread 类实现自定义的线程类
6
7# 创建自定义线程类
8class cust_thread(threading.Thread):
9 # 初始化线程实例
10 def __init__(self,thread_id,thread_name,sleep_time):
11 # 初始化
12 threading.Thread.__init__(self)
13 # 属性赋值
14 self.thread_id = thread_id
15 self.thread_name = thread_name
16 self.sleep_time = sleep_time
17
18 # 线程函数
19 def run(self):
20 print "当前线程:",self.thread_name
21 print "等待时间:",self.sleep_time
22 time.sleep(self.sleep_time)
23# 创建线程实例
24thread_1 = cust_thread(0,"线程_1",3)
25thread_2 = cust_thread(1, "线程_2", 5)
-
线程同步
1# 导入 threading 模块
2import threading
3# threading 模块使用 Lock() 函数提供锁的支持
4# 获取锁对象
5lock_ = threading.Lock()
6# 加锁
7lock_.acquire()
8# 释放锁
9lock_.release()
除了使用锁的形式实现线程同步,也可以使用使用 python 模块中的队列的形式来实现对线程同步的控制。
-
实例
1# -*- coding: UTF-8 -*-
2
3# 导入 threading 模块
4import threading
5import time
6# threading 模块中提供了比较强大的线程类 Thread 来实现对线程的独立管理
7# 通过继承该 Thread 类实现自定义的线程类
8
9# 创建自定义线程类
10class cust_thread(threading.Thread):
11 # 初始化线程实例
12 def __init__(self,thread_id,thread_name,sleep_time,lock_obj):
13 # 初始化
14 threading.Thread.__init__(self)
15 # 属性赋值
16 self.thread_id = thread_id
17 self.thread_name = thread_name
18 self.sleep_time = sleep_time
19 self.lock_obj = lock_obj
20
21 # 线程函数
22 def run(self):
23 self.lock_obj.acquire()
24 print "当前线程:",self.thread_name
25 print "等待时间:",self.sleep_time
26 time.sleep(self.sleep_time)
27 self.lock_obj.release()
28
29
30if __name__ == '__main__':
31 lock_obj = threading.Lock()
32 thread_1 = cust_thread(0,"线程_1",3,lock_obj)
33 thread_2 = cust_thread(1, "线程_2", 5,lock_obj)
34 # 启动线程
35 thread_1.start()
36 thread_2.start()
37 # 守护线程执行完毕
38 thread_1.join()
39 thread_2.join()
40 print "完成所有线程执行"
更多精彩前往微信公众号【Python 集中营】,关注获取《python 从入门到精通全套视频》
相关推荐
《大话数据分析:Tableau数据可视化实战》的数据集是一份重要的资源,对于想要学习和提升Tableau数据可视化技能的人来说极具价值。Tableau是一款强大的商业智能工具,它允许用户通过直观的拖放界面来探索和可视化...
python入门进阶6本书:cookbook-LeetCode.pdf、django入门与实践.pdf、http面试指南.pdf、Python进阶.pdf、The Flask Mega 中文版.pdf、简明python教程.pdf、数据库面试知识点汇总.pdf
本文用比喻的方法大话python语言 通俗易懂 很容易上手,把深奥的文字变成形象化 的语言Python语言是什么? 想象你有一个非常聪明的机器人朋友,名字叫Python。Python能听懂你用简单的英语(编程语言)告诉它的指令,...
Python是一种广泛使用的高级编程语言,以其易读性、简洁的语法和强大的功能而闻名。在初学者阶段,掌握Python的基础语法至关重要。以下是一些关键的知识点,这些知识点在提供的文件中有所体现: 1. **print()函数**...
大话存储:存储系统底层架构原理极限剖析(终极版)第3部分 大话存储:存储系统底层架构原理极限剖析(终极版)第3部分大话存储:存储系统底层架构原理极限剖析(终极版)第3部分
《大话设计模式》C++实现-design-patterns-cpp
大话Java:从零基础到数据库、Web开发以漫画的形式,由浅入深、循序渐进地介绍Java编程的常用技术和方法,内容涵盖了Java基本语法结构、面向对象特征、集合框架体系、异常处理、GUI编程、MySQL数据库、JDBC数据库...
大话Python|基础语法(上)
大话存储:存储系统底层架构原理极限剖析(终极版)_张冬2015.01_P989
### 大话分布式系统理论进阶:深入解析Paxos协议 #### 一、引言 随着互联网技术的发展,分布式系统已经成为现代软件架构中的重要组成部分。为了确保在复杂多变的网络环境中系统的可靠性和一致性,分布式系统理论的...
本文为资深网络编辑鲜橙与其他几位朋友录制的一段关于移动开发之QT-Quick开发的音频,在情人节来临之际我们特地奉献给大家,希望大家喜欢,也希望大家支持鲜橙! 《大话IT》节目介绍:《大话IT》是由各IT媒体中一群...
读书笔记:大话设计模式python实现
企业级安卓开发_入门+进阶 分章节 从入门到进阶 有实例 有源代码 01大话企业级Android开发第一部分_简介 02大话企业级Android开发第二部分_环境搭 03大话企业级Android开发开发流程及项目管理 04大话企业级Android...
《大话存储:存储系统底层架构原理极限剖析(终极版)》是一本深入探讨存储技术的专业书籍,由一位对技术充满热情的作者精心撰写。这本书以其严谨性和创新性,为读者揭示了存储系统的奥秘,提供了全面而深入的洞察。...
共5个压缩包
大话存储:存储系统底层架构原理极限剖析(终极版)第4部分 大话存储:存储系统底层架构原理极限剖析(终极版)第4部分
读书笔记:《大话设计模式》Python实现
[大话存储:网[大话存储:网络存储系统原理精解与最佳实践].张冬.扫描版络存储系统原理精解与最佳实践].张冬.扫描版
- 形容书多:**汗牛充栋**、**浩如烟海** - 形容歌声:**穿云裂石**、**响遏行云** - 形容夫妻男女:**举案齐眉**、**破镜重圆**、**相敬如宾**、**卿卿我我**、**比翼双飞**、**耳鬓厮磨**、**白头偕老**、**...