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统计文件行数示例分享
Feb 21 Python
浅析python 内置字符串处理函数的使用方法
Jun 11 Python
Python实现打印螺旋矩阵功能的方法
Nov 21 Python
hmac模块生成加入了密钥的消息摘要详解
Jan 11 Python
Python常见工厂函数用法示例
Mar 21 Python
PYTHON基础-时间日期处理小结
May 05 Python
python学生信息管理系统(初级版)
Oct 17 Python
Python字符串的全排列算法实例详解
Jan 07 Python
Python 中包/模块的 `import` 操作代码
Apr 22 Python
python3 求约数的实例
Dec 05 Python
python删除文件、清空目录的实现方法
Sep 23 Python
Python实现智慧校园自动评教全新版
Jun 18 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下用cookie统计用户访问网页次数的代码
2010/05/09 PHP
PHP根据IP地址获取所在城市具体实现
2013/11/27 PHP
php实现留言板功能(会话控制)
2017/05/23 PHP
jquery实现图片左右间隔滚动特效(可自动播放)
2013/05/08 Javascript
js监听键盘事件示例代码
2013/07/26 Javascript
简介JavaScript中search()方法的使用
2015/06/06 Javascript
js实现兼容性好的微软官网导航下拉菜单效果
2015/09/07 Javascript
jQuery Validate初步体验(一)
2015/12/12 Javascript
bootstrap多种样式进度条展示
2016/12/20 Javascript
React Js 微信禁止复制链接分享禁止隐藏右上角菜单功能
2017/05/26 Javascript
node前端模板引擎Jade之标签的基本写法
2018/05/11 Javascript
微信小程序实现漂亮的弹窗效果
2020/05/26 Javascript
使用electron将vue-cli项目打包成exe的方法
2018/09/29 Javascript
jQuery操作cookie的示例代码
2019/06/05 jQuery
微信小程序引入模块中wxml、wxss、js的方法示例
2019/08/09 Javascript
详解JavaScript中new操作符的解析和实现
2020/09/04 Javascript
[48:21]Mski vs VGJ.S Supermajor小组赛C组 BO3 第一场 6.3
2018/06/04 DOTA
[46:21]Liquid vs LGD 2018国际邀请赛淘汰赛BO3 第一场 8.23
2018/08/24 DOTA
python批量提取word内信息
2015/08/09 Python
Python实现的购物车功能示例
2018/02/11 Python
Tensorflow卷积神经网络实例
2018/05/24 Python
python数据处理之如何选取csv文件中某几行的数据
2019/09/02 Python
python模块导入的方法
2019/10/24 Python
python 简单的调用有道翻译
2020/11/25 Python
利用Python过滤相似文本的简单方法示例
2021/02/03 Python
英国最大的正宗复古足球衫制造商和零售商:TOFFS
2018/06/21 全球购物
幼儿园元旦亲子活动方案
2014/02/17 职场文书
宣传活动总结范文
2014/07/01 职场文书
工作作风懒散检讨书
2014/10/29 职场文书
晚会开幕词
2015/01/28 职场文书
世界遗产的导游词
2015/02/13 职场文书
办公室岗位职责范本
2015/04/11 职场文书
合理缓解职场压力,让你随时保持最佳状态!
2019/06/21 职场文书
Go中的条件语句Switch示例详解
2021/08/23 Golang
浅谈如何保证Mysql主从一致
2022/03/13 MySQL
CSS文本阴影 text-shadow 悬停效果详解
2022/05/25 HTML / CSS