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获取电脑硬件信息及状态的实现方法
Aug 29 Python
Python使用tablib生成excel文件的简单实现方法
Mar 16 Python
深入解析Python编程中super关键字的用法
Jun 24 Python
python学习之matplotlib绘制散点图实例
Dec 09 Python
python实现nao机器人手臂动作控制
Apr 29 Python
使用python来调用CAN通讯的DLL实现方法
Jul 03 Python
Django错误:TypeError at / 'bool' object is not callable解决
Aug 16 Python
Tensorflow进行多维矩阵的拆分与拼接实例
Feb 07 Python
Python模拟FTP文件服务器的操作方法
Feb 18 Python
python 如何将office文件转换为PDF
Sep 22 Python
scrapy处理python爬虫调度详解
Nov 23 Python
python实现学生信息管理系统(面向对象)
Jun 05 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 smarty的预保留变量总结
2008/12/04 PHP
php垃圾代码优化操作代码
2010/08/05 PHP
使用php+apc实现上传进度条且在IE7下不显示的问题解决方法
2013/04/25 PHP
PHP仿微信多图片预览上传实例代码
2016/09/13 PHP
jQuery 表单验证扩展(四)
2010/10/20 Javascript
javascript将异步校验表单改写为同步表单
2015/01/27 Javascript
javascript弹出页面回传值的方法
2015/01/28 Javascript
javascript实现可全选、反选及删除表格的方法
2015/05/15 Javascript
jQuery实现图片渐入渐出切换展示效果
2015/08/15 Javascript
js+css实现select的美化效果
2016/03/24 Javascript
原生javascript实现读写CSS样式的方法详解
2017/02/20 Javascript
详解vue2.0脚手架的webpack 配置文件分析
2017/05/27 Javascript
jquery tmpl模板(实例讲解)
2017/09/02 jQuery
nodejs实现OAuth2.0授权服务认证
2017/12/27 NodeJs
微信小程序仿知乎实现评论留言功能
2018/11/28 Javascript
Element-ui自定义table表头、修改列标题样式、添加tooltip、:render-header使用
2019/04/11 Javascript
jQuery实现文本显示一段时间后隐藏的方法分析
2019/06/20 jQuery
Vue的Eslint配置文件eslintrc.js说明与规则介绍
2020/02/03 Javascript
解析Python中的异常处理
2015/04/28 Python
python基础_文件操作实现全文或单行替换的方法
2017/09/04 Python
python正则表达式re之compile函数解析
2017/10/25 Python
tensorflow之并行读入数据详解
2020/02/05 Python
Python 合并拼接字符串的方法
2020/07/28 Python
Python pip使用超时问题解决方案
2020/08/03 Python
python 实现socket服务端并发的四种方式
2020/12/14 Python
利用HTML5+CSS3实现3D转换效果实例详解
2017/05/02 HTML / CSS
HTML5之SVG 2D入门12—SVG DOM及DOM操作介绍
2013/01/30 HTML / CSS
销售工作人员的自我评价分享
2013/11/10 职场文书
个人自荐书
2013/12/20 职场文书
股东合作协议书范本
2014/04/14 职场文书
人力资源管理求职信
2014/08/07 职场文书
运动员入场前导词
2015/07/20 职场文书
宝宝满月宴答谢词
2015/09/30 职场文书
详解MySQL连接挂死的原因
2021/05/18 MySQL
教你如何使用Python Tkinter库制作记事本
2021/06/10 Python
MySQL数据库简介与基本操作
2022/05/30 MySQL