Python 是支持多线程的,并且是 native 的线程。主要是通过 thread 和 threading 这两个模块来实现的。thread是比较底层的模块,threading 是对 thread 做了一些包装的,可以更加方便的被使用。这里需要提一下的是 Python 对线程的支持还不够完善,不能利用多 CPU,但是下个版本的 Python 中已经考虑改进这点,让我们拭目以待。
threading 模块里面主要是对一些线程的操作对象化了,创建了叫 Thread 的 class。一般来说,使用线程有两种模式,一种是创建线程要执行的函数,把这个函数传递进 Thread 对象里,让它来执行;另一种是直接从 Thread 继承,创建一个新的 class,把线程执行的代码放到这个新的 class 里。我们来看看这两种做法吧。
#-*- encoding: gb2312 -*-
import string, threading, time
def thread_main(a):
global count, mutex
# 获得线程名
threadname = threading.currentThread().getName()
for x in xrange(0, int(a)):
# 取得锁
mutex.acquire()
count = count + 1
# 释放锁
mutex.release()
print threadname, x, count
time.sleep(1)
def main(num):
global count, mutex
threads = []
count = 1
# 创建一个锁
mutex = threading.Lock()
# 先创建线程对象
for x in xrange(0, num):
threads.append(threading.Thread(target=thread_main, args=(10,)))
# 启动所有线程
for t in threads:
t.start()
# 主线程中等待所有子线程退出
for t in threads:
t.join()
if __name__ == '__main__':
num = 4
# 创建4个线程
main(4)
上面的就是第一种做法,这种做法是很常见的,下面是另一种,曾经使用过 Java 的朋友应该很熟悉这种模式:
#-*- encoding: gb2312 -*-
import threading
import time
class Test(threading.Thread):
def __init__(self, num):
threading.Thread.__init__(self)
self._run_num = num
def run(self):
global count, mutex
threadname = threading.currentThread().getName()
for x in xrange(0, int(self._run_num)):
mutex.acquire()
count = count + 1
mutex.release()
print threadname, x, count
time.sleep(1)
if __name__ == '__main__':
global count, mutex
threads = []
num = 4
count = 1
# 创建锁
mutex = threading.Lock()
# 创建线程对象
for x in xrange(0, num):
threads.append(Test(10))
# 启动线程
for t in threads:
t.start()
# 等待子线程结束
for t in threads:
t.join()
From http://www.pythonid.com/html/fenleiwenzhang/thread/20070704/19.html
分享到:
相关推荐
Python 中的多线程编程是使用 Threading 模块实现的,该模块提供了丰富的功能来创建和管理线程。在学习 Threading 模块之前,需要了解 Python 的基础知识,包括函数、类、对象等概念。 Threading 模块 Threading ...
在Python编程中,多线程是并发执行任务的重要机制,特别是在需要执行多个独立任务时,可以提高程序的执行效率。`threading`模块是Python的标准库之一,它提供了线程管理的功能,包括创建、同步和控制线程。然而,...
在Python 2.7及以后的版本中,`thread`模块被重命名为`_thread`,并推荐使用`threading`模块进行多线程编程。 **1. 常用线程函数** - `threading.active_count()`: 返回当前活动的`threading.Thread`对象的数量。 ...
总的来说,理解并正确使用锁和可重入锁是解决Python多线程安全问题的关键。在编写多线程程序时,合理地引入锁机制可以防止数据竞争,确保程序的正确性。但同时,过度使用锁可能导致程序的复杂性和性能下降,因此在...
【Python多线程threading模块详解】 Python的多线程主要通过`threading`模块来实现,该模块提供了丰富的功能,使得在Python中编写多线程应用变得方便。`threading`模块不仅包含了低级别的`_thread`模块的所有方法,...
1、多线程的理解 多进程和多线程都可以执行多个任务,线程是进程的一部分。...2、Python多线程创建 在Python中,同样可以实现多线程,有两个标准模块thread和threading,不过我们主要使用 更高级的threading模块。
### Python多线程模块 Python提供了两种多线程模块:`thread`和`threading`。`thread`模块是低级接口,而`threading`模块则更高级,提供更多的线程管理功能和同步原语,如锁、事件、条件变量等。在实际应用中,我们...
在Python中,可以使用`threading`模块来创建和管理线程。在浏览器多开的场景下,每个浏览器实例可以在不同的线程中运行,以提高效率。 实现步骤如下: 1. **安装依赖**: 首先确保已安装Python的`selenium`库,以及...
### Python多线程-threaning模块详解 #### 概述 Python中进行多线程编程时,`threading`模块是非常重要的工具之一。相比于较为基础的`thread`模块,`threading`模块提供了更为丰富的功能与灵活性。本文将详细介绍`...
在Python中,多线程是通过`threading`模块来实现的。然而,在默认情况下,该模块并未直接提供暂停、恢复以及退出线程的功能。这意味着一旦线程启动(即调用了`start()`方法),就只能等到线程内的目标函数完全执行...
总结起来,`python多线程定时器`的实现涉及到Python的`threading`和`time`模块,通过`Thread`和`Timer`类来创建和管理线程,使用定时器控制线程的启动时间。主程序`main.py`使用这些工具来安排多个任务按设定的间隔...
在阅读源码时,可以重点关注`Thread`类的构造方法、`start`、`run`、`join`等方法,以及同步对象如`Lock`的实现,这有助于理解Python多线程的工作原理。 总的来说,`threading`库是Python中进行多线程编程的主要...
这里我们将深入探讨如何在Python中使用多线程同步来确保文件读写的安全性。 首先,我们来看一个简单的文件读写示例。`ltz_schedule_times.py`中定义了两个函数,`ReadTimes()`和`WriteTimes()`。`ReadTimes()`函数...
Python提供了两个主要的模块来实现多线程:`threading`和`_thread`。`threading`模块是更高级的接口,提供了线程、锁、事件、信号量等同步原语,方便开发者控制线程的并发执行。`_thread`模块则提供基础的线程功能,...
在Python中,可以使用`threading`模块创建和管理线程。 标题中的“单线程与多线程Python爬虫”涉及的核心是如何利用线程技术优化地图瓦片的下载过程。单线程爬虫适用于小型项目,其代码简单易懂,但当需要下载大量...
在Python中,我们通常使用`threading`模块来实现多线程,而不是`thread`模块,因为`threading`模块提供了更高级别的功能和更好的线程管理。 `threading`模块的核心组件包括: 1. **Thread对象**:这是多线程编程的...
本文实例讲述了Python多线程threading模块用法。分享给大家供大家参考,具体如下: 多线程 – threading python的thread模块是比较底层的模块,python的threading模块对thread做了一些包装,可以更加方便的被使用。 ...
通过深入学习和实践压缩包中的“PYthon multithreading Test”源码,你可以更好地掌握Python多线程的原理和应用,为编写高效、稳定的多线程程序打下坚实的基础。在实际开发中,结合具体场景选择合适的并发模型,是...
首先,我们需要导入Python的`threading`模块,它是Python标准库中的多线程支持库。`threading.Thread`是创建新线程的类,而`threading.Lock`用于线程同步,防止竞态条件。 ```python import threading import ...
全局解释器锁(GTL):python代码的执行是由python虚拟机进行控制, 在主循环中只能有一个控制线程在执行 一个进程的独立运行片段,一个进程里面可以有多个线程 多线程之间的执行顺序是无序的 一个进程的多个线程间共享...