`
san_yun
  • 浏览: 2639939 次
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

python模块之threading: 在python中使用多线程

 
阅读更多
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()  


参考:http://blog.csdn.net/jgood/article/details/4305604
分享到:
评论

相关推荐

    python多线程-threading模块.pdf

    Python 中的多线程编程是使用 Threading 模块实现的,该模块提供了丰富的功能来创建和管理线程。在学习 Threading 模块之前,需要了解 Python 的基础知识,包括函数、类、对象等概念。 Threading 模块 Threading ...

    python使用threading获取线程函数返回值的实现方法

    在Python编程中,多线程是并发执行任务的重要机制,特别是在需要执行多个独立任务时,可以提高程序的执行效率。`threading`模块是Python的标准库之一,它提供了线程管理的功能,包括创建、同步和控制线程。然而,...

    Python内置库:threading(多线程操作).docx

    在Python 2.7及以后的版本中,`thread`模块被重命名为`_thread`,并推荐使用`threading`模块进行多线程编程。 **1. 常用线程函数** - `threading.active_count()`: 返回当前活动的`threading.Thread`对象的数量。 ...

    Python应用实战:python多线程-多线程安全问题&lock与rlock.zip

    总的来说,理解并正确使用锁和可重入锁是解决Python多线程安全问题的关键。在编写多线程程序时,合理地引入锁机制可以防止数据竞争,确保程序的正确性。但同时,过度使用锁可能导致程序的复杂性和性能下降,因此在...

    python多线程threading.doc

    【Python多线程threading模块详解】 Python的多线程主要通过`threading`模块来实现,该模块提供了丰富的功能,使得在Python中编写多线程应用变得方便。`threading`模块不仅包含了低级别的`_thread`模块的所有方法,...

    python多线程编程示例(threading.py)

    1、多线程的理解 多进程和多线程都可以执行多个任务,线程是进程的一部分。...2、Python多线程创建 在Python中,同样可以实现多线程,有两个标准模块thread和threading,不过我们主要使用 更高级的threading模块。

    Python程序设计:多线程爬虫.pptx

    ### Python多线程模块 Python提供了两种多线程模块:`thread`和`threading`。`thread`模块是低级接口,而`threading`模块则更高级,提供更多的线程管理功能和同步原语,如锁、事件、条件变量等。在实际应用中,我们...

    python selenium chrome 多开 多线程

    在Python中,可以使用`threading`模块来创建和管理线程。在浏览器多开的场景下,每个浏览器实例可以在不同的线程中运行,以提高效率。 实现步骤如下: 1. **安装依赖**: 首先确保已安装Python的`selenium`库,以及...

    python多线程-threading模块.docx

    ### Python多线程-threaning模块详解 #### 概述 Python中进行多线程编程时,`threading`模块是非常重要的工具之一。相比于较为基础的`thread`模块,`threading`模块提供了更为丰富的功能与灵活性。本文将详细介绍`...

    python多线程定时器

    总结起来,`python多线程定时器`的实现涉及到Python的`threading`和`time`模块,通过`Thread`和`Timer`类来创建和管理线程,使用定时器控制线程的启动时间。主程序`main.py`使用这些工具来安排多个任务按设定的间隔...

    Python多线程编程方式2 threading库的介绍源码

    在阅读源码时,可以重点关注`Thread`类的构造方法、`start`、`run`、`join`等方法,以及同步对象如`Lock`的实现,这有助于理解Python多线程的工作原理。 总的来说,`threading`库是Python中进行多线程编程的主要...

    python多线程同步之文件读写控制

    这里我们将深入探讨如何在Python中使用多线程同步来确保文件读写的安全性。 首先,我们来看一个简单的文件读写示例。`ltz_schedule_times.py`中定义了两个函数,`ReadTimes()`和`WriteTimes()`。`ReadTimes()`函数...

    python 线程的暂停, 恢复, 退出详解及实例

    在Python中,多线程是通过`threading`模块来实现的。然而,在默认情况下,该模块并未直接提供暂停、恢复以及退出线程的功能。这意味着一旦线程启动(即调用了`start()`方法),就只能等到线程内的目标函数完全执行...

    浅析Python多线程与多进程的使用

    Python提供了两个主要的模块来实现多线程:`threading`和`_thread`。`threading`模块是更高级的接口,提供了线程、锁、事件、信号量等同步原语,方便开发者控制线程的并发执行。`_thread`模块则提供基础的线程功能,...

    单线程与多线程python爬虫地图瓦片源码

    在Python中,可以使用`threading`模块创建和管理线程。 标题中的“单线程与多线程Python爬虫”涉及的核心是如何利用线程技术优化地图瓦片的下载过程。单线程爬虫适用于小型项目,其代码简单易懂,但当需要下载大量...

    python多线程学习

    在Python中,我们通常使用`threading`模块来实现多线程,而不是`thread`模块,因为`threading`模块提供了更高级别的功能和更好的线程管理。 `threading`模块的核心组件包括: 1. **Thread对象**:这是多线程编程的...

    Python多线程threading模块用法实例分析

    本文实例讲述了Python多线程threading模块用法。分享给大家供大家参考,具体如下: 多线程 – threading python的thread模块是比较底层的模块,python的threading模块对thread做了一些包装,可以更加方便的被使用。 ...

    PYthon-multithreading-Test.rar_python_python 多线程_python多线程_多线程

    通过深入学习和实践压缩包中的“PYthon multithreading Test”源码,你可以更好地掌握Python多线程的原理和应用,为编写高效、稳定的多线程程序打下坚实的基础。在实际开发中,结合具体场景选择合适的并发模型,是...

    python 多线程实现多个网址的多次快速访问

    首先,我们需要导入Python的`threading`模块,它是Python标准库中的多线程支持库。`threading.Thread`是创建新线程的类,而`threading.Lock`用于线程同步,防止竞态条件。 ```python import threading import ...

    Python-threading:线程

    全局解释器锁(GTL):python代码的执行是由python虚拟机进行控制, 在主循环中只能有一个控制线程在执行 一个进程的独立运行片段,一个进程里面可以有多个线程 多线程之间的执行顺序是无序的 一个进程的多个线程间共享...

Global site tag (gtag.js) - Google Analytics