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采集腾讯新闻实例
Jul 10 Python
深入解析Python编程中super关键字的用法
Jun 24 Python
Python解析json之ValueError: Expecting property name enclosed in double quotes: line 1 column 2(char 1)
Jul 06 Python
Python多线程爬虫实战_爬取糗事百科段子的实例
Dec 15 Python
Python实现DDos攻击实例详解
Feb 02 Python
linux环境中没有网络怎么下载python
Jul 07 Python
Python ORM编程基础示例
Feb 02 Python
Python爬虫实现模拟点击动态页面
Mar 05 Python
Python如何使用PIL Image制作GIF图片
May 16 Python
Appium+Python实现简单的自动化登录测试的实现
Jan 26 Python
pandas求平均数和中位数的方法实例
Aug 04 Python
Python创建SQL数据库流程逐步讲解
Sep 23 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脚本的10个技巧(1)
2006/10/09 PHP
php+mysql开源XNA 聚合程序发布 下载
2007/07/13 PHP
AJAX的跨域访问-两种有效的解决方法介绍
2013/06/22 PHP
PHP实现将视频转成MP4并获取视频预览图的方法
2015/03/12 PHP
PHP关联数组实现根据元素值删除元素的方法
2015/06/26 PHP
php里array_work用法实例分析
2015/07/13 PHP
PHP isset()与empty()的使用区别详解
2017/02/10 PHP
制作特殊字的脚本
2006/06/26 Javascript
非常好的js代码
2006/06/27 Javascript
Javascript排序算法之计数排序的实例
2014/04/05 Javascript
JQuery.Ajax()的data参数类型实例详解
2015/11/20 Javascript
如何动态加载外部Javascript文件
2015/12/02 Javascript
使用CDN和AJAX加速WordPress中jQuery的加载
2015/12/05 Javascript
轻松掌握JavaScript中的Math object数学对象
2016/05/26 Javascript
基于jQuery实现表格内容的筛选功能
2016/08/21 Javascript
微信小程序 教程之小程序配置
2016/10/17 Javascript
分分钟玩转Vue.js组件(二)
2017/03/01 Javascript
vue2里面ref的具体使用方法
2017/10/27 Javascript
vue初尝试--项目结构(推荐)
2018/01/30 Javascript
使用vuex的state状态对象的5种方式
2018/04/19 Javascript
JavaScript事件委托原理与用法实例分析
2018/06/07 Javascript
微信小程序当前时间时段选择器插件使用方法详解
2018/12/28 Javascript
通过vue手动封装on、emit、off的代码详解
2019/05/29 Javascript
简单了解JavaScript sort方法
2019/11/25 Javascript
[01:05:56]Liquid vs VP Supermajor决赛 BO 第二场 6.10
2018/07/04 DOTA
python批量实现Word文件转换为PDF文件
2018/03/15 Python
Python QQBot库的QQ聊天机器人
2019/06/19 Python
Python 使用folium绘制leaflet地图的实现方法
2019/07/05 Python
Python替换月份为英文缩写的实现方法
2019/07/15 Python
Python定时任务APScheduler的实例实例详解
2019/07/22 Python
Form表单及django的form表单的补充
2019/07/25 Python
欧洲有机婴儿食品最大的市场:Organic Baby Food(供美国和加拿大)
2018/03/28 全球购物
瑞典廉价机票预订网站:Seat24
2018/06/19 全球购物
意大利在线药房:Saninforma
2021/02/11 全球购物
竞选部门副经理的自荐书范文
2014/02/11 职场文书
七年级作文(600字3篇)
2019/09/24 职场文书