python threading模块操作多线程介绍


Posted in Python onApril 08, 2015

python是支持多线程的,并且是native的线程。主要是通过thread和threading这两个模块来实现的。thread是比较底层的模块,threading是对thread做了一些包装的,可以更加方便的被使用。这里需要提一下的是python对线程的支持还不够完善,不能利用多CPU,但是下个版本的python中已经考虑改进这点,让我们拭目以待吧。

    threading模块里面主要是对一些线程的操作对象化了,创建了叫Thread的class。一般来说,使用线程有两种模式,一种是创建线程要执行的函数,把这个函数传递进Thread对象里,让它来执行;另一种是直接从Thread继承,创建一个新的class,把线程执行的代码放到这个新的class里。我们来看看这两种做法吧。

#-*- 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)

上面的就是第一种做法,这种做法是很常见的,下面是另一种,曾经使用过Java的朋友应该很熟悉这种模式:

#-*- 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中Collections模块的Counter容器类使用教程
May 31 Python
Django+JS 实现点击头像即可更改头像的方法示例
Dec 26 Python
Python按钮的响应事件详解
Mar 04 Python
python sort、sort_index方法代码实例
Mar 28 Python
Python实现html转换为pdf报告(生成pdf报告)功能示例
May 04 Python
Python中一些深不见底的“坑”
Jun 12 Python
Python实现的对一个数进行因式分解操作示例
Jun 27 Python
对Python获取屏幕截图的4种方法详解
Aug 27 Python
python处理RSTP视频流过程解析
Jan 11 Python
浅析关于Keras的安装(pycharm)和初步理解
Oct 23 Python
Python字符串的15个基本操作(小结)
Feb 03 Python
python双向链表实例详解
May 25 Python
Python使用scrapy采集数据时为每个请求随机分配user-agent的方法
Apr 08 #Python
python中Genarator函数用法分析
Apr 08 #Python
探索Python3.4中新引入的asyncio模块
Apr 08 #Python
Windows下用py2exe将Python程序打包成exe程序的教程
Apr 08 #Python
Python bsddb模块操作Berkeley DB数据库介绍
Apr 08 #Python
Python使用scrapy采集数据过程中放回下载过大页面的方法
Apr 08 #Python
在Python中使用M2Crypto模块实现AES加密的教程
Apr 08 #Python
You might like
php GD绘制24小时柱状图
2008/06/28 PHP
删除数组元素实用的PHP数组函数
2008/08/18 PHP
用php实现的获取网页中的图片并保存到本地的代码
2010/01/05 PHP
PHP批量删除、清除UTF-8文件BOM头的代码实例
2014/04/14 PHP
PHP转换文本框内容为HTML格式的方法
2016/07/20 PHP
php与阿里云短信接口接入操作案例分析
2020/05/27 PHP
document.all还是document.getElementsByName?
2006/07/21 Javascript
使用jQuery操作Cookies的实现代码
2011/10/09 Javascript
JavaScript字符串对象charAt方法入门实例(用于取得指定位置的字符)
2014/10/17 Javascript
js实现单击图片放大图片的方法
2015/02/17 Javascript
jquery中map函数遍历数组用法实例
2015/05/18 Javascript
javascript中for/in循环及使用技巧
2015/09/01 Javascript
ANGULARJS中使用JQUERY分页控件
2015/09/16 Javascript
js实现文件上传表单域美化特效
2015/11/02 Javascript
基于JavaScript实现通用tab选项卡(通用性强)
2016/01/07 Javascript
理解JavaScript事件对象
2016/01/25 Javascript
浅析上传头像示例及其注意事项
2016/12/14 Javascript
BootStrap的select2既可以查询又可以输入的实现代码
2017/02/17 Javascript
原生JS实现动态加载js文件并在加载成功后执行回调函数的方法
2020/12/30 Javascript
详解Webstorm 下的Angular2.0开发之路(图文)
2018/12/06 Javascript
vue cli3.0结合echarts3.0与地图的使用方法示例
2019/03/26 Javascript
LayUI动态设置checkbox不显示的解决方法
2019/09/02 Javascript
[00:42]《辉夜杯》—职业组预选赛12月3日15点 正式打响
2015/12/03 DOTA
Python max内置函数详细介绍
2016/11/17 Python
python利用requests库模拟post请求时json的使用教程
2018/12/07 Python
实例讲解Python3中abs()函数
2019/02/19 Python
python3.7简单的爬虫实例详解
2019/07/08 Python
对python中的os.getpid()和os.fork()函数详解
2019/08/08 Python
线程同步的方法
2016/11/23 面试题
医药工作岗位求职信分享
2013/12/31 职场文书
社区优秀志愿者先进事迹
2014/05/09 职场文书
酒店节能减排方案
2014/05/26 职场文书
员工安全生产责任书
2014/07/22 职场文书
2014年审计人员工作总结
2014/12/19 职场文书
证券区域经理岗位职责
2015/04/10 职场文书
python开发飞机大战游戏
2021/07/15 Python