Python中多线程thread与threading的实现方法


Posted in Python onAugust 18, 2014

学过Python的人应该都知道,Python是支持多线程的,并且是native的线程。本文主要是通过thread和threading这两个模块来实现多线程的。

python的thread模块是比较底层的模块,python的threading模块是对thread做了一些包装的,可以更加方便的被使用。

这里需要提一下的是python对线程的支持还不够完善,不能利用多CPU,但是下个版本的python中已经考虑改进这点,让我们拭目以待吧。

threading模块里面主要是对一些线程的操作对象化了,创建了叫Thread的class。

一般来说,使用线程有两种模式,一种是创建线程要执行的函数,把这个函数传递进Thread对象里,让它来执行;另一种是直接从Thread继承,创建一个新的class,把线程执行的代码放到这个新的 class里。

我们来看看这两种做法吧。

一、Python thread实现多线程

#-*- 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)

二、Python threading实现多线程

#-*- 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()

相信本文所述Python多线程实例对大家的Python程序设计能够起到一定的借鉴价值。

Python 相关文章推荐
Zabbix实现微信报警功能
Oct 09 Python
python监控键盘输入实例代码
Feb 09 Python
python merge、concat合并数据集的实例讲解
Apr 12 Python
Python对数据进行插值和下采样的方法
Jul 03 Python
解决python3 urllib 链接中有中文的问题
Jul 16 Python
使用numba对Python运算加速的方法
Oct 15 Python
python游戏地图最短路径求解
Jan 16 Python
Numpy数组array和矩阵matrix转换方法
Aug 05 Python
window环境pip切换国内源(pip安装异常缓慢的问题)
Dec 31 Python
Python 实现训练集、测试集随机划分
Jan 08 Python
pycharm开发一个简单界面和通用mvc模板(操作方法图解)
May 27 Python
Python语言中的数据类型-序列
Feb 24 Python
Python使用函数默认值实现函数静态变量的方法
Aug 18 #Python
Python中正则表达式的用法实例汇总
Aug 18 #Python
python中enumerate的用法实例解析
Aug 18 #Python
Python采用raw_input读取输入值的方法
Aug 18 #Python
Python中Collection的使用小技巧
Aug 18 #Python
Python实现3行代码解简单的一元一次方程
Aug 18 #Python
Python统计列表中的重复项出现的次数的方法
Aug 18 #Python
You might like
php eval函数一句话木马代码
2015/05/21 PHP
PHP curl使用实例
2015/07/02 PHP
thinkphp autoload 命名空间自定义 namespace
2015/07/17 PHP
php连接mysql数据库
2017/03/21 PHP
PHP Post获取不到非表单数据的问题解决办法
2018/02/27 PHP
ThinkPHP框架实现FTP图片上传功能示例
2019/04/08 PHP
用JavaScript脚本实现Web页面信息交互
2006/10/11 Javascript
js获取div高度的代码
2008/08/09 Javascript
Javascript 代码也可以变得优美的实现方法
2009/06/22 Javascript
js实现九宫格图片半透明渐显特效的方法
2015/02/16 Javascript
JS+CSS模拟可以无刷新显示内容的留言板实例
2015/03/03 Javascript
JQuery鼠标移到小图显示大图效果的方法
2015/06/10 Javascript
Node学习记录之cluster模块
2017/05/31 Javascript
vue.js 实现评价五角星组件的实例代码
2018/08/13 Javascript
最适应的vue.js的form提交涉及多种插件【推荐】
2018/08/27 Javascript
微信小程序顶部导航栏滑动tab效果
2019/01/28 Javascript
vue模仿网易云音乐的单页面应用
2019/04/24 Javascript
教你搭建按需加载的Vue组件库(小结)
2019/07/29 Javascript
Node 代理访问的实现
2019/09/19 Javascript
微信小程序开发中var that =this的用法详解
2020/01/18 Javascript
javascript设计模式 ? 命令模式原理与用法实例分析
2020/04/20 Javascript
如何构建 vue-ssr 项目的方法步骤
2020/08/04 Javascript
python中精确输出JSON浮点数的方法
2014/04/18 Python
Python面向对象编程中的类和对象学习教程
2015/03/30 Python
在Python中使用成员运算符的示例
2015/05/13 Python
Centos Python2 升级到Python3的简单实现
2016/06/21 Python
python中不能连接超时的问题及解决方法
2018/06/10 Python
在django view中给form传入参数的例子
2019/07/19 Python
Python连接mysql方法及常用参数
2020/09/01 Python
美味咖啡的顶级烘焙师:Cafe Britt
2018/03/15 全球购物
小学生防溺水广播稿
2014/01/12 职场文书
护理专业自我鉴定
2014/01/30 职场文书
财务内勤岗位职责
2014/04/17 职场文书
教师党员自我评议不足范文
2014/10/19 职场文书
工程技术员岗位职责
2015/04/11 职场文书
Tomcat starup.bat 脚本实现开机自启动
2022/04/20 Servers