目前python 提供了几种多线程实现方式 thread,threading,multithreading ,其中thread模块比较底层,而threading模块是对thread做了一些包装,可以更加方便的被使用。
2.7版本之前python对线程的支持还不够完善,不能利用多核CPU,但是2.7版本的python中已经考虑改进这点,出现了multithreading  模块。threading模块里面主要是对一些线程的操作对象化,创建Thread的class。一般来说,使用线程有两种模式:
A 创建线程要执行的函数,把这个函数传递进Thread对象里,让它来执行;
B 继承Thread类,创建一个新的class,将要执行的代码 写到run函数里面。
本文介绍两种实现方法。
第一种 创建函数并且传入Thread 对象中
t.py 脚本内容

  1. import threading,time
  2. from time import sleep, ctime
  3. def now() :
  4. return str( time.strftime( '%Y-%m-%d %H:%M:%S' , time.localtime() ) )
  5. def test(nloop, nsec):
  6. print 'start loop', nloop, 'at:', now()
  7. sleep(nsec)
  8. print 'loop', nloop, 'done at:', now()
  9. def main():
  10. print 'starting at:',now()
  11. threadpool=[]
  12. for i in xrange(10):
  13. th = threading.Thread(target= test,args= (i,2))
  14. threadpool.append(th)
  15. for th in threadpool:
  16. th.start()
  17. for th in threadpool :
  18. threading.Thread.join( th )
  19. print 'all Done at:', now()
  20. if __name__ == '__main__':
  21. main()

执行结果:

thclass.py 脚本内容:

  1. import threading ,time
  2. from time import sleep, ctime
  3. def now() :
  4. return str( time.strftime( '%Y-%m-%d %H:%M:%S' , time.localtime() ) )
  5. class myThread (threading.Thread) :
  6. """docstring for myThread"""
  7. def __init__(self, nloop, nsec) :
  8. super(myThread, self).__init__()
  9. self.nloop = nloop
  10. self.nsec = nsec
  11. def run(self):
  12. print 'start loop', self.nloop, 'at:', ctime()
  13. sleep(self.nsec)
  14. print 'loop', self.nloop, 'done at:', ctime()
  15. def main():
  16. thpool=[]
  17. print 'starting at:',now()
  18. for i in xrange(10):
  19. thpool.append(myThread(i,2))
  20. for th in thpool:
  21. th.start()
  22. for th in thpool:
  23. th.join()
  24. print 'all Done at:', now()
  25. if __name__ == '__main__':
  26. main()

执行结果:

【Python】python 多线程两种实现方式的更多相关文章

  1. python 多线程两种实现方式,Python多线程下的_strptime问题,

    python 多线程两种实现方式 原创 Linux操作系统 作者:杨奇龙 时间:2014-06-08 20:24:26  44021  0 目前python 提供了几种多线程实现方式 thread,t ...

  2. python 多进程的两种创建方式

    Python中使用线程有两种方式:函数或者用类来包装线程对象. 第一种---------函数 菜鸟教程的我没看懂,说说我自己懂的----看视频理解的 import time import thread ...

  3. Python基础:Python运行的两种基本方式

    完成Python的安装之后,我们可以开始编写Python代码以及运行Python程序了.我们来看一下运行Python具体有哪几种方式 1.REPL 所谓REPL即read.eva.print.loop ...

  4. Java多线程--两种实现方式

    进程概述: 在这之前,有必要了解一下什么是进程? 在一个操作系统中,每个独立的执行的程序都可称为一个进程,也就是"正在运行的程序".如图所示: 线程概述: 如上所述,每个运行的程序 ...

  5. python package 的两种组织方式

    方式一/package1/ .../__init__.py # 空文件 .../class1.py class Class1: def __init__(self): self.name = &quo ...

  6. python类的两种创建方式

    参考: https://blog.csdn.net/likunkun__/article/details/81949479

  7. 基础知识:编程语言介绍、Python介绍、Python解释器安装、运行Python解释器的两种方式、变量、数据类型基本使用

    2018年3月19日 今日学习内容: 1.编程语言的介绍 2.Python介绍 3.安装Python解释器(多版本共存) 4.运行Python解释器程序两种方式.(交互式与命令行式)(♥♥♥♥♥) 5 ...

  8. 周一02.3运行python程序的两种方式

    一.运行python程序的两种方式 方法一:交互式:                     优点:输入一行代码立刻返回结果                      缺点:无法永久保存代码 方法二: ...

  9. 执行python解释器的两种方式

    执行python解释器的两种方式 1.交互式 python是高级语言,是解释型语言,逐行翻译,写一句翻译一句 print ('hello world') 2.命令行式 python和python解释器 ...

随机推荐

  1. NSSet和NSMutableSet 确保数据的唯一性--备

    NSSet和NSMutableSet是无序的, 但是它保证数据的唯一性.当插入相同的数据时,不会有任何效果.从内部实现来说是hash表,所以可以常数时间内查找一个数据. 1.NSSet的使用 [NSS ...

  2. 转: ubuntu配置NFS,挂载开发板

    ====================================== 命令: 1. $sudo apt-get install nfs-kernel-server           (安装N ...

  3. VA自动补全QT

    发现用了一下,VA不能把QT的东西进行代码自动补全.于是要动下小手脚. 1.在Windows系统环境变量下增加 QTDIR = 你QT的安装目录. 2启动VS->工具->选项->项目 ...

  4. Boost 和 STL 相比有哪些优势和劣势?

    1. 在设计原则上,STL和Boost大体统一因为STL和Boost基本上都是标准委员会那批人在策划.审核和维护,所以口味上是相对接近的.但是因为Boost并不在标准中,或者说是下一代标准的试验场,所 ...

  5. HDOJ 1323 Perfection(简单题)

    Problem Description From the article Number Theory in the 1994 Microsoft Encarta: "If a, b, c a ...

  6. iOS - UITableViewCell Custom Selection Style Color

    Customize UITextView selection color in UITableView Link : http://derekneely.com/2010/01/uitableview ...

  7. spring中获取Bean

    在测试类中我们获取已经装配给容器的Bean的方法是通过ApplicationContext,即 ApplicationContext ac=new ClassPathXmlApplicationCon ...

  8. hdu 4940 无源汇有上下界最大流

    /* <img src="http://img.blog.csdn.net/20140823174212937?watermark/2/text/aHR0cDovL2Jsb2cuY3N ...

  9. 数据持久化之CoreData

    再次回归博客园, 已经实属不易了, 面临这近期忙忙碌碌的项目开发, 虽然并不是完全的没有闲暇时间, 但是怎么说呢, 也有着各种的无奈与曲折, 面临这产品需求的不断变化和页面的不断更新, 对于一个程序员 ...

  10. Android学习笔记之viewholder

    在adapter中通过使用静态内部类(viewholder)缓存组件的引用来防止ListView刷新时重新LayoutInflater跟findViewById从而达到优化的目的.示例如下: @Ove ...