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通过正则查找微博@(at)用户的方法
Mar 13 Python
用实例详解Python中的Django框架中prefetch_related()函数对数据库查询的优化
Apr 01 Python
python使用wmi模块获取windows下硬盘信息的方法
May 15 Python
Python中struct模块对字节流/二进制流的操作教程
Jan 21 Python
python通过elixir包操作mysql数据库实例代码
Jan 31 Python
python爬虫框架scrapy实现模拟登录操作示例
Aug 02 Python
VPS CENTOS 上配置python,mysql,nginx,uwsgi,django的方法详解
Jul 01 Python
在pytorch中查看可训练参数的例子
Aug 18 Python
numpy求平均值的维度设定的例子
Aug 24 Python
django实现模型字段动态choice的操作
Apr 01 Python
在spyder IPython console中,运行代码加入参数的实例
Apr 20 Python
Python中bisect的用法及示例详解
Jul 20 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 获取全局变量的代码
2011/04/21 PHP
PHP多线程类及用法实例
2014/12/03 PHP
php实现替换手机号中间数字为*号及隐藏IP最后几位的方法
2016/11/16 PHP
php readfile()修改文件上传大小设置
2017/08/11 PHP
php用户名的密码加密更安全的方法
2019/06/21 PHP
javascript学习基础笔记之DOM对象操作
2011/11/03 Javascript
THREE.JS入门教程(4)创建粒子系统
2013/01/24 Javascript
js 浏览本地文件夹系统示例代码
2013/10/24 Javascript
jQuery中:contains选择器用法实例
2014/12/30 Javascript
jQuery源码分析之jQuery.fn.each与jQuery.each用法
2015/01/23 Javascript
JavaScript将XML转成JSON的方法
2015/03/12 Javascript
jQuery判断指定id的对象是否存在的方法
2015/05/22 Javascript
JavaScript的面向对象编程基础
2015/08/13 Javascript
基于JavaScript实现全屏透明遮罩div层锁屏效果
2016/01/26 Javascript
Backbone中View之间传值的学习心得
2016/08/09 Javascript
javascript 判断页面访问方式电脑或者移动端
2016/09/19 Javascript
AngularJS的ng Http Request与response格式转换方法
2016/11/07 Javascript
React组件中的this的具体使用
2018/02/28 Javascript
vue中axios的封装问题(简易版拦截,get,post)
2018/06/15 Javascript
在js代码拼接dom对象到页面上的模板总结
2018/10/21 Javascript
浅谈Vuex注入Vue生命周期的过程
2019/05/20 Javascript
vue图片裁剪插件vue-cropper使用方法详解
2020/12/16 Vue.js
[02:18]DOTA2英雄基础教程 育母蜘蛛
2014/01/20 DOTA
[01:01:01]完美世界DOTA2联赛循环赛 GXR vs FTD BO2第一场 10.29
2020/10/29 DOTA
python中随机函数random用法实例
2015/04/30 Python
Python迭代和迭代器详解
2016/11/10 Python
fastcgi文件读取漏洞之python扫描脚本
2017/04/23 Python
Python实现二维数组按照某行或列排序的方法【numpy lexsort】
2017/09/22 Python
Python检查图片是否损坏及图片类型是否正确过程详解
2019/09/30 Python
纯CSS实现的大小渐变、渐远效果
2014/04/15 HTML / CSS
Kivari官网:在线购买波西米亚服装
2018/10/29 全球购物
简述Linux文件系统通过i节点把文件的逻辑结构和物理结构转换的工作过程
2016/01/06 面试题
银行实习生的自我评价
2013/12/09 职场文书
签约仪式主持词
2014/03/19 职场文书
领导干部群众路线对照检查材料
2014/11/05 职场文书
Nginx+SpringBoot实现负载均衡的示例
2021/03/31 Servers