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 相关文章推荐
Python 错误和异常小结
Oct 09 Python
Python中的对象,方法,类,实例,函数用法分析
Jan 15 Python
Python线程详解
Jun 24 Python
Python读写unicode文件的方法
Jul 10 Python
使用matplotlib中scatter方法画散点图
Mar 19 Python
Python将文字转成语音并读出来的实例详解
Jul 15 Python
django将数组传递给前台模板的方法
Aug 06 Python
Pytorch: 自定义网络层实例
Jan 07 Python
python3实现将json对象存入Redis以及数据的导入导出
Jul 16 Python
Python爬虫之Selenium鼠标事件的实现
Dec 04 Python
python实现的人脸识别打卡系统
May 08 Python
Python如何让字典保持有序排列
Apr 29 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下对数组进行排序的函数
2010/08/08 PHP
php中sql注入漏洞示例 sql注入漏洞修复
2014/01/24 PHP
JavaScript判断两种格式的输入日期的正确性的代码
2007/03/25 Javascript
JavaScript高级程序设计阅读笔记(十六) javascript检测浏览器和操作系统-detect.js
2012/08/14 Javascript
ActiveX控件与Javascript之间的交互示例
2014/06/04 Javascript
node.js下LDAP查询实例分享
2015/09/30 Javascript
JS原型、原型链深入理解
2016/02/27 Javascript
D3.js实现折线图的方法详解
2016/09/21 Javascript
微信小程序 wxapp导航 navigator详解
2016/10/31 Javascript
AngularJS 霸道的过滤器小结
2017/04/26 Javascript
vue页面使用阿里oss上传功能的实例(二)
2017/08/09 Javascript
vue组件Prop传递数据的实现示例
2017/08/17 Javascript
使用vue-router与v-if实现tab切换遇到的问题及解决方法
2018/09/07 Javascript
分享5个小技巧让你写出更好的 JavaScript 条件语句
2018/10/20 Javascript
小程序实现选择题选择效果
2018/11/04 Javascript
微信小程序项目总结之记账小程序功能的实现(包括后端)
2019/08/20 Javascript
nodejs+express最简易的连接数据库的方法
2020/12/23 NodeJs
[04:04]显微镜下的DOTA2第六期——电影级别的华丽团战
2014/06/20 DOTA
Python实现快速排序和插入排序算法及自定义排序的示例
2016/02/16 Python
Python格式化输出字符串方法小结【%与format】
2018/10/29 Python
python实现二维插值的三维显示
2018/12/17 Python
Python编写通讯录通过数据库存储实现模糊查询功能
2019/07/18 Python
Python项目 基于Scapy实现SYN泛洪攻击的方法
2019/07/23 Python
python的mysql数据库建立表与插入数据操作示例
2019/09/30 Python
美国珠宝精品店:Opulent Jewelers
2019/08/20 全球购物
会计专业推荐信
2013/10/29 职场文书
阿德的梦教学反思
2014/02/06 职场文书
爱心倡议书范文
2014/05/12 职场文书
中职毕业生自我鉴定范文(3篇)
2014/09/28 职场文书
精神文明建设先进个人事迹材料
2014/12/24 职场文书
2015年企业工作总结范文
2015/04/28 职场文书
毕业论文致谢怎么写
2015/05/14 职场文书
中学总务处工作总结
2015/08/12 职场文书
2016新党章学习心得体会
2016/01/15 职场文书
虚拟机linux端mysql数据库无法远程访问的解决办法
2021/05/26 MySQL
手把手教你使用TensorFlow2实现RNN
2021/07/15 Python