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在命令行下使用google翻译(带语音)
Jan 16 Python
浅谈Python 字符串格式化输出(format/printf)
Jul 21 Python
Python实现将文本生成二维码的方法示例
Jul 18 Python
对python append 与浅拷贝的实例讲解
May 04 Python
Django restframework 源码分析之认证详解
Feb 22 Python
python写入文件自动换行问题的方法
Jul 05 Python
python Django编写接口并用Jmeter测试的方法
Jul 31 Python
Django实现跨域的2种方法
Jul 31 Python
Django实现文件上传下载功能
Oct 06 Python
TensorFlow dataset.shuffle、batch、repeat的使用详解
Jan 21 Python
Django重设Admin密码过程解析
Feb 10 Python
PyCharm常用配置和常用插件(小结)
Feb 06 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 文件扩展名 获取函数
2009/06/03 PHP
php防止CC攻击代码 php防止网页频繁刷新
2015/12/21 PHP
运用jquery实现table单双行不同显示并能单行选中
2009/07/25 Javascript
JavaScript实现自己的DOM选择器原理及代码
2013/03/04 Javascript
JavaScript中实现map功能代码分享
2015/06/11 Javascript
用JS实现图片轮播效果代码(一)
2016/06/26 Javascript
完美解决axios跨域请求出错的问题
2018/02/05 Javascript
关于echarts在节点显示动态数据及添加提示文本所遇到的问题
2018/04/20 Javascript
官方推荐react-navigation的具体使用详解
2018/05/08 Javascript
解决angularJS中input标签的ng-change事件无效问题
2018/09/13 Javascript
vscode配置vue下的es6规范自动格式化详解
2019/03/20 Javascript
js闭包的9个使用场景
2020/12/29 Javascript
Python基于pygame实现的font游戏字体(附源码)
2015/11/11 Python
Python、PyCharm安装及使用方法(Mac版)详解
2017/04/28 Python
Python如何快速实现分布式任务
2017/07/06 Python
python+flask实现API的方法
2018/11/21 Python
python 中的列表生成式、生成器表达式、模块导入
2019/06/19 Python
Django框架HttpResponse对象用法实例分析
2019/11/01 Python
pytorch之添加BN的实现
2020/01/06 Python
Python简单实现区域生长方式
2020/01/16 Python
基于python实现删除指定文件类型
2020/07/21 Python
基于OpenCV的网络实时视频流传输的实现
2020/11/15 Python
基于CSS3的CSS 多栏(Multi-column)实现瀑布流源码分享
2014/06/11 HTML / CSS
美国电子产品折扣网站:Daily Steals
2017/05/20 全球购物
艺龙旅行网酒店预订:国内、港澳台酒店
2018/06/26 全球购物
购买英国原创艺术:Art Gallery
2018/08/25 全球购物
The North Face北面德国官网:美国著名户外品牌
2018/12/12 全球购物
英国123鲜花网站:123 Flowers
2019/07/07 全球购物
美国新娘礼品店:The Paisley Box
2020/09/08 全球购物
建筑专业自荐信
2013/10/18 职场文书
学生励志演讲稿
2014/01/06 职场文书
大学生村官承诺书
2014/03/28 职场文书
房屋租房协议书范本
2014/12/04 职场文书
质量负责人岗位职责
2015/02/15 职场文书
《司马光》教学反思
2016/02/22 职场文书
讨论nginx location 顺序问题
2022/05/30 Servers