创建线程的两种方法:

1,直接调用threading.Thread来构造thread对象,Thread的参数如下:

class threading.Thread(group=None, target=None, name=None, args=(), kwargs={})

group为None;

target为线程将要执行的功能函数;

name为线程的名字,也可以在对象构造后调用setName()来设定;

args为tuple类型的参数,可以为多个,如果只有一个也的使用tuple的形式传入,例如(1,);

kwargs为dict类型的参数,也即位命名参数

threading.Thread对象的其他方法:

start(),用来启动线程;

join(), 等待直到线程结束;

isAlive(),获取线程状态

setDeamon(), 设置线程为deamon线程,必须在start()调用前调用,默认为非demon。

注意: python的主线程在没有非deamon线程存在时就会退出。

threading.currentthread() , 用来获得当前的线程;

threading.enumerate() , 用来多的当前存活的所有线程;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#coding:utf-8
import threading
def func1(num):
    for in range(num):
        #threading.currentThread()获取当前线程,getName()获取线程名字
        print 'I am %s.num:%s' % (threading.currentThread().getName(), i)
                       
def main(thread_num):
    thread_list = [] #定义一个线程列表
    for in range(thread_num):
        thread_list.append(threading.Thread(target=func1, args = (3, )))
    for in thread_list:
        #a.setDaemon(True)这个setDaemon默认为False 非守护线程
        #表示主线程等所有子线程结束后,在结束
        #设置为True的话 表示是个守护线程 子线程就会随着主线程的结束而结束
        #听说服务监控工具生成的心跳线程 就是用的守护线程
        a.start()
                       
                       
    for in thread_list:
        a.join() #表示等待直到线程运行完毕
                       
main(3)
#########运行结果######
>>> I am Thread-1.num:0
I am Thread-1.num:1
I am Thread-1.num:2
I am Thread-2.num:0
I am Thread-2.num:1
I am Thread-2.num:2
I am Thread-3.num:0
I am Thread-3.num:1
I am Thread-3.num:2

2,直接从threading.Thread继承,然后重写__init__方法和run方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#coding:utf-8
import threading
class MyThread(threading.Thread): #继承父类threading.Thread
    def __init__(self, num ): 
        threading.Thread.__init__(self)
        self.num = num
          
    #把要执行的代码写到run函数里面 线程在创建后会直接运行run函数 
    def run(self):
        for in range(self.num):
            print 'I am %s.num:%s' % (self.getName(), i)
                 
for in range(3):
    = MyThread(3)
    t.start()
    t.join()
##########运行结果#########
>>> I am Thread-1.num:0
I am Thread-1.num:1
I am Thread-1.num:2
I am Thread-2.num:0
I am Thread-2.num:1
I am Thread-2.num:2
I am Thread-3.num:0
I am Thread-3.num:1
I am Thread-3.num:2

本文出自 “师父领进门,修行靠个人!” 博客,请务必保留此出处http://zeping.blog.51cto.com/6140112/1258966

最新文章

  1. 第九篇.bootstrap导航
  2. 使用TortoiseGit将代码上传到bitbucket
  3. CodeForces 468A Program F
  4. C++ 遇见的一些函数
  5. MTK Android4.0.3 ICS 添加缅甸语Myanmar
  6. sql获取表字段名、描述和类型
  7. String和StringBuilder的使用
  8. require.js实践
  9. phpcms 杂乱总结
  10. mysql查看所有触发器以及存储过程等操作集合
  11. [原创] debian 9.3 搭建Jira+Confluence+Bitbucket项目管理工具(一) -- 安装jdk(含jre)及 MySql 5.6.39
  12. Android应用程序签名详解
  13. bzoj千题计划191:bzoj2337: [HNOI2011]XOR和路径
  14. zabbix】问题 Time zone for PHP is not set (configuration parameterdate.timezone)
  15. php 文件上传处理
  16. Monkey捕获Crash原理
  17. Xcode引入了第三方的类库之后真机调试提示莫名其妙的错误
  18. 3.hive的thriftserver服务
  19. 77.PS接收来自PL的按键中断
  20. zbar

热门文章

  1. 【230】4T硬盘如何完全利用(GPT)
  2. mysql存储过程详细教程
  3. PHP面向对象.__set(),__get(),__isset(),__unset()四个方法的
  4. 非正常关闭myeclicps后,出现错误Errors occurred during the build.的解决方法
  5. centos编译安装apache
  6. ORACLE FAQ
  7. Win32 OpenGL标准例子
  8. git代理设置方法解决
  9. 利用GCTA工具计算复杂性状/特征(Complex Trait)的遗传相关性(genetic correlation)
  10. Codeforce 370J Bottles(动态规划-01背包)