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 相关文章推荐
wxpython 学习笔记 第一天
Feb 09 Python
Python的垃圾回收机制深入分析
Jul 16 Python
使用Python编写Linux系统守护进程实例
Feb 03 Python
Python中max函数用于二维列表的实例
Apr 03 Python
Python处理中文标点符号大集合
May 14 Python
python Flask 装饰器顺序问题解决
Aug 08 Python
Python3爬虫学习之将爬取的信息保存到本地的方法详解
Dec 12 Python
Python数据抓取爬虫代理防封IP方法
Dec 23 Python
使用Python脚本从文件读取数据代码实例
Jan 19 Python
用python介绍4种常用的单链表翻转的方法小结
Feb 24 Python
Python实现迪杰斯特拉算法并生成最短路径的示例代码
Dec 01 Python
python中opencv实现图片文本倾斜校正
Jun 11 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的call_user_func传reference引发的思考
2010/07/23 PHP
PHP 中检查或过滤IP地址的实现代码
2011/11/27 PHP
解析PHP生成静态html文件的三种方法
2013/06/18 PHP
php 5.6版本中编写一个PHP扩展的简单示例
2015/01/20 PHP
php将图片保存为不同尺寸图片的图片类实例
2015/03/30 PHP
PHP封装curl的调用接口及常用函数详解
2018/05/31 PHP
ajaxControlToolkit AutoCompleteExtender的用法
2008/10/30 Javascript
Google Map API更新实现用户自定义标注坐标
2009/07/29 Javascript
快速查找数组中的某个元素并返回下标示例
2013/09/03 Javascript
js替代copy(示例代码)
2013/11/27 Javascript
js简单实现Select互换数据的方法
2015/08/17 Javascript
JavaScript实现图片本地预览功能【不用上传至服务器】
2017/09/20 Javascript
vue2.0 常用的 UI 库实例讲解
2017/12/12 Javascript
Node.js 利用cheerio制作简单的网页爬虫示例
2018/03/01 Javascript
vue 1.0 结合animate.css定义动画效果
2018/07/11 Javascript
详解angular部署到iis出现404解决方案
2018/08/14 Javascript
浅谈针对Vue相同路由不同参数的刷新问题
2018/09/29 Javascript
[51:26]VP vs VG 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
python 2.7.14安装图文教程
2018/04/08 Python
Python使用pymysql从MySQL数据库中读出数据的方法
2018/07/25 Python
对python中的six.moves模块的下载函数urlretrieve详解
2018/12/19 Python
python实现图书借阅系统
2019/02/20 Python
Python如何处理大数据?3个技巧效率提升攻略(推荐)
2019/04/15 Python
西班牙拥有最佳品牌的动物商店:Animalear.com
2018/01/05 全球购物
Unineed旗下时尚轻奢网站:FABHunt
2019/05/13 全球购物
The North Face北面法国官网:美国著名户外品牌
2019/11/01 全球购物
物流仓储实习自我鉴定
2013/09/25 职场文书
日语求职信范文
2013/12/17 职场文书
汽车销售顾问求职自荐信
2014/01/01 职场文书
小学三年级数学教学反思
2014/01/31 职场文书
会计学生自我鉴定
2014/02/06 职场文书
企业活动策划方案
2014/06/02 职场文书
关于青春的演讲稿500字
2014/08/22 职场文书
法定代表人授权委托书范本
2014/10/07 职场文书
小学教育见习报告
2014/10/31 职场文书
草系十大最强宝可梦,纸片人上榜,榜首大家最熟悉
2022/03/18 日漫