Python多线程编程之多线程加锁

简介: Python语言本身是支持多线程的,不像PHP语言。 下面的例子是多个线程做同一批任务,任务总是有task_num个,每次线程做一个任务(print),做完后继续取任务,直到所有任务完成为止。 1 #coding:utf-8 2 import threading 3 4 st...

Python语言本身是支持多线程的,不像PHP语言。

下面的例子是多个线程做同一批任务,任务总是有task_num个,每次线程做一个任务(print),做完后继续取任务,直到所有任务完成为止。

 1 #coding:utf-8
 2 import threading
 3 
 4 start_task = 0
 5 task_num = 10000
 6 mu = threading.Lock()   ###通过工厂方法获取一个新的锁对象
 7 
 8 class MyThread(threading.Thread):   ###类MyThread继承基类threading.Thread
 9 
10     def run(self):  ##线程启动的入口函数,子类需重写
11         global start_task
12         global mu
13         global start_task
14 
15         while start_task < task_num:    ##如果任务没有完成,则继续
16             if mu.acquire():    ##加锁
17                 if start_task < task_num:
18                     print start_task
19                     start_task = start_task + 1
20                 mu.release()    ##释放锁
21 
22 def test():
23     thread_all = []
24     for i in range(6):  ##for循环创建6个线程
25         t = MyThread()  ##创建线程
26         thread_all.append(t)
27         t.start()   ###启动线程
28 
29     for i in range(6):
30         thread_all[i].join()    ##等待线程结束
31 
32 if __name__ == "__main__":
33     test()

 

测试加锁与不加锁效果:将任务数设置为1千万或者以上,在多核机器上将print输出分别保存,就能说明问题。

相关文章
|
1天前
|
数据采集 人工智能 数据挖掘
Python编程入门:从基础到实战的快速指南
【9月更文挑战第25天】本文旨在为初学者提供一个简明扼要的Python编程入门指南。通过介绍Python的基本概念、语法规则以及实际案例分析,帮助读者迅速掌握Python编程的核心技能。文章将避免使用复杂的专业术语,而是采用通俗易懂的语言和直观的例子来阐述概念,确保内容的可读性和实用性。
|
1天前
|
机器学习/深度学习 人工智能 数据挖掘
探索Python编程之美:从基础到进阶
【9月更文挑战第25天】在数字时代的浪潮中,编程已成为一项宝贵的技能。本篇文章将引导你步入Python的奇妙世界,一个既适合初学者又深受资深开发者喜爱的编程语言。我们将一起揭开Python语言的基础面纱,探索它的核心概念,并通过实际示例深入理解其强大功能。无论你是编程新手还是希望提升自己的老手,这篇文章都将为你提供一条清晰的学习路径,助你在编程之旅上更进一步。
|
1天前
|
存储 开发者 Python
从理论到实践:Python中Trie树与Suffix Tree的完美结合,开启编程新篇章!
在编程领域,高效的数据结构对于解决问题至关重要。本文通过一个案例分析,介绍如何在Python中结合使用Trie树(前缀树)和Suffix Tree(后缀树)。案例聚焦于开发具备高效拼写检查和文本相似度检测功能的文本编辑器。首先,通过构建Trie树快速检查单词是否存在;接着,利用Suffix Tree检测文本相似度。尽管Python标准库未直接提供Suffix Tree,但可通过第三方库或自定义实现。本文展示了高级数据结构在实际应用中的强大功能,并强调了理论与实践相结合的重要性。
6 1
|
1天前
|
数据挖掘 Python
Python数据挖掘编程基础
本章介绍了Python数据挖掘编程的基础知识,涵盖Python入门所需的命令、判断与循环、函数、库导入等内容,并重点讲解了数据分析预处理和建模常用库。通过学习基本运算、数据结构、字符串操作等,帮助读者快速掌握Python语言,为后续数据挖掘工作打下坚实基础。例如,通过代码`a=3`进行赋值,利用`a*3`执行乘法运算,使用`a**3`计算幂,以及通过对字符串的拼接和分割操作,展示Python的强大功能。
7 0
|
1天前
|
安全 算法 Java
Java中的多线程编程:从基础到高级应用
本文深入探讨了Java中的多线程编程,从最基础的概念入手,逐步引导读者了解并掌握多线程开发的核心技术。无论是初学者还是有一定经验的开发者,都能从中获益。通过实例和代码示例,本文详细讲解了线程的创建与管理、同步与锁机制、线程间通信以及高级并发工具等主题。此外,还讨论了多线程编程中常见的问题及其解决方案,帮助读者编写出高效、安全的多线程应用程序。
|
1天前
|
算法 开发者 计算机视觉
Python并查集:数据结构界的肌肉男,让你在编程路上无所畏惧!
在编程的浩瀚宇宙中,数据结构如同基石,构建了解决问题的坚实框架。而并查集(Union-Find),这位数据结构界的“肌肉男”,以其独特的魅力和强大的功能,让无数开发者在面对复杂关系处理时,都能感受到前所未有的从容与自信。今天,就让我们一同揭开并查集的神秘面纱,看看它是如何成为你编程路上的得力助手的。
6 0
|
2天前
|
存储 算法 Java
关于python3的一些理解(装饰器、垃圾回收、进程线程协程、全局解释器锁等)
该文章深入探讨了Python3中的多个重要概念,包括装饰器的工作原理、垃圾回收机制、进程与线程的区别及全局解释器锁(GIL)的影响等,并提供了详细的解释与示例代码。
9 0
|
2天前
|
Shell Linux Python
python执行linux系统命令的几种方法(python3经典编程案例)
文章介绍了多种使用Python执行Linux系统命令的方法,包括使用os模块的不同函数以及subprocess模块来调用shell命令并处理其输出。
8 0
|
2天前
|
调度 数据库 Python
python中APScheduler的使用详解(python3经典编程案例)
文章详细讲解了在Python中使用APScheduler来安排和执行定时任务的方法,包括不同调度器的配置与使用场景。
9 0
|
2天前
|
数据可视化 搜索推荐 JavaScript
pyecharts模块的几个经典案例(python经典编程案例)
文章提供了多个使用pyecharts模块创建数据可视化的Python编程案例,展示如何生成各种类型的图表并进行定制化设置。
7 0