• 【转】使用python进行多线程编程


    1. python对多线程的支持

    1)虚拟机层面

    Python虚拟机使用GIL(Global Interpreter Lock,全局解释器锁)来互斥线程对共享资源的访问,暂时无法利用多处理器的优势。使用 Python 时,建议使用进程,或者混合创建进程和线程。

    2)语言层面

    在语言层面,Python对多线程提供了很好的支持,Python中多线程相关的模块包括:thread,threading,Queue。可以方便地支持创建线程、互斥锁、信号量、同步等特性。

    • thread:多线程的底层支持模块,一般不建议使用。
    • threading:对thread进行了封装,将一些线程的操作对象化。
    • Queue:实现了多生产者(Producer)、多消费者(Consumer)的队列,支持锁原语,能够在多个线程之间提供很好的同步支持。

     2. python多线程编程实践

    在 Python 中使用线程时,这个模式是一种很常见的并且推荐使用的方式。具体工作步骤描述如下:

    1. 创建一个 Queue.Queue() 的实例,然后使用数据对它进行填充。
    2. 将经过填充数据的实例传递给线程类,后者是通过继承 threading.Thread 的方式创建的。
    3. 生成守护线程池。
    4. 每次从队列中取出一个项目,并使用该线程中的数据和 run 方法以执行相应的工作。
    5. 在完成这项工作之后,使用 queue.task_done() 函数向任务已经完成的队列发送一个信号。
    6. 对队列执行 join 操作,实际上意味着等到队列为空,再退出主程序。

    在使用这个模式时需要注意一点:通过将守护线程设置为 true,将允许主线程或者程序仅在守护线程处于活动状态时才能够退出。这种方式创建了一种简单的方式以控制程序流程,因为在退出之前,您可以对队列执行 join 操作、或者等到队列为空。

    详细资料请参见:

    《使用 Python 进行线程编程》:http://www.ibm.com/developerworks/cn/aix/library/au-threadingpython/

    《多线程的 Python 教程--“贪吃蛇”》:http://www.oschina.net/translate/multithreaded-python-tutorial-with-threadworms

    python开发者门户(pythontab)上有一个名为《python多线程编程》的系列,共5篇,写得挺清楚的。

    • 《python多线程编程1:python对多线程的支持》http://w ww.pythontab.com/html/2013/pythonhexinbiancheng_0402/331.html
    • 《python多线程编程2:线程的创建、启动、挂起和退出》http://w ww.pythontab.com/html/2013/pythonhexinbiancheng_0403/333.html
    • 《python多线程编程3:使用互斥锁同步线程》http://w ww.pythontab.com/html/2013/pythonhexinbiancheng_0411/347.html
    • 《python多线程编程4:死锁和可重入锁》。为了支持在同一线程中多次请求同一资源,python提供了可重入锁。http://w w w.pythontab.com/html/2013/pythonhexinbiancheng_0415/352.html
    • 《python多线程编程5:条件变量同步》http://w ww.pythontab.com/html/2013/pythonhexinbiancheng_0417/358.html
  • 相关阅读:
    laravel excel 导入
    linux 怎么解压
    mysql分表和表分区详解
    mysql主从复制windows-》linux
    Redis和Memcache的区别
    mysql group by 用法解析(详细)
    [置顶] mysql常用函数
    mysql测试数据库employees一些sql语句
    session入mysql
    session入库
  • 原文地址:https://www.cnblogs.com/sunada2005/p/3142102.html
Copyright © 2020-2023  润新知