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

【转】使用python进行多线程编程相关推荐

  1. python进阶 多线程编程 —— threading和queue库实现多线程编程

    python进阶 多线程编程 -- threading和queue库实现多线程编程) 摘要 多线程实现逻辑封装 模型参数选择实例 摘要 本文主要介绍了利用python的 threading和queue ...

  2. 进程、线程及python的多线程编程

    目录 一.进程.线程和并行执行 1.什么是进程.线程 注意 2.什么是并行执行 二.python的多线程编程 threading模块 语法 多线程编程的传参 演示 三.总结 一.进程.线程和并行执行 ...

  3. python --- 基础多线程编程

    在python中进行多线程编程之前必须了解的问题: 1. 什么是线程? 答:线程是程序中一个单一的顺序控制流程.进程内一个相对独立的.可调度的执行单元,是系统独立调度和分派CPU的基本单位指运行中的程 ...

  4. python之多线程编程(一):基本介绍

    Python提供了多个模块来支持多线程编程,包括thread,threading和Queue模块等.编写的程序可以使用thread和threading模块来创建与管理线程. thread模块提供了最基 ...

  5. python 实现多线程编程

    就个人而言,学了这么多年的课程又写了这么多年的程序,虽然没有涉及到企业级的项目,但还是体会到了有几个知识点是非常重要的,包括:面向对象的思想.如何架构一个项目.设计模式来具体解决问题.应用机器学习和深 ...

  6. python多核多线程编程实例_Python多线程

    多线程基础概念 并行与并发并行:同时处理多个任务,必须在多核环境下 一段时间内同时处理多个任务,单核也可以并发 并发手段线程:内核空间的调度 进程:内核空间的调度 协程:用户空间的调度 线程可以允许程 ...

  7. Python Threading 多线程编程

    写在篇前   threading模块是python多线程处理包,使用该模块可以很方便的实现多线程处理任务,本篇文章的基础是需要掌握进程.线程基本概念,对PV原语.锁等传统同步处理方法有一定的了解.另外 ...

  8. python多核多线程编程_python是否支持多处理器/多核编程?

    What is the difference between multiprocessor programming and multicore programming? preferably show ...

  9. 一文看懂Python多进程与多线程编程(工作学习面试必读)

    进程(process)和线程(thread)是非常抽象的概念, 也是程序员必需掌握的核心知识.多进程和多线程编程对于代码的并发执行,提升代码效率和缩短运行时间至关重要.小编我今天就来尝试下用一文总结下 ...

最新文章

  1. 中国互联网+激光加工行业商业模式创新与投资机会深度研究报告
  2. springboot redis配置
  3. 关于Spring 国际化 No message found under code 的解决方案
  4. mysql的语句分类,查询、子查询及连接查询
  5. Static关键字测试
  6. win7安装python2.7_python学习(3)-win7安装python2.7
  7. linux help命令编写,Linux shell命令帮助格式详解
  8. 阿里巴巴对Java编程【异常处理】的规约
  9. 前端学习(2965):路由环境的搭建
  10. java 二分搜索获得大于目标数的第一位_程序员数据结构算法编程,二分查找搜索算法的原理与应用介绍!...
  11. react.js从入门到精通(六)——路由的使用
  12. python中的append()有什么功能_在python中append()函数能做什么
  13. linux 搭建日志服务器
  14. 冲击、碰撞试验测试技术——冲击传感器的校准
  15. 【unity发布webgl】遇到的问题和解决办法
  16. 网络丢包怎么办?这些解决办法
  17. 企业内IT部/信息部发展阶段和趋势(第一阶段)
  18. 最小二乘法平面方程拟合计算, 点云法向量估算
  19. JVM中类加载的时机
  20. Gradle For Android(三)Gradle优化与灵活的使用技巧

热门文章

  1. String.valueOf() 和 toString的区别
  2. expires为session_面试必问:session,cookie和token的区别
  3. pandas 合并所有列_Python学习:Pandas库
  4. android去掉png图片灰色背景,JS解决PNG图片灰色背景问题
  5. mysql默认时间怎么不同步_MYSQL 更新时间自动同步与创建时间默认值共存问题
  6. matlab中D A1在哪,A1=d(1:15,:);A2=d(16:30,:);A3=
  7. 在浏览器端调试代码并直接修改原文件、移动端虚拟键盘中实现搜索按钮
  8. 原型到底应该画到什么程度?被骂N次后我得出了答案
  9. 螺旋方阵(Leetcode第59题)
  10. 农夫过河+java,农夫过河问题(java版)